F# printf string

CodeMonkey picture CodeMonkey · Feb 25, 2012 · Viewed 17.7k times · Source

Im puzzled

let test = "aString"

let callMe =
    printfn test

Why isn't this working? Throws below error at compile time:

The type 'string' is not compatible with the type 'Printf.TextWriterFormat<'a>'

This works fine:

printfn "aString"

Answer

svick picture svick · Feb 25, 2012

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.