The Haskell version of printf does not statically analyse the format string and will raise an exception if the provided arguments are invalid e.g.
Prelude Text.Printf> printf "%d\n" "invalid"
*** Exception: printf: bad formatting char 'd'
The behaviour of F#'s printfn is hard-coded in the compiler and could not be written in F# iteself.