F# printf string

That's because the format parameter is not actually a string. It's TextWriterFormat<'T> and the F# compiler converts the string format into that type. But it doesn't work on string variables, because the compiler can't convert the string to TextWriterFormat<'T> at runtime.

If you want to print the content of the variable, you shouldn't even try to use printfn this way, because the variable could contain format specifications.

You can either use the %s format:

printfn "%s" test

Or use the .Net Console.WriteLine():

Console.WriteLine test

Don't forget to add open System at the top of the file if you want to use the Console class.


In line with what svick said, you might also try this:

let test = "aString"
let callMe = printfn (Printf.TextWriterFormat<_> test)
callMe

In addition to answers below. You may also write like this:

let test = "aString"
let print =
   printfn $"{test}"