Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

F#: Why doesn't this code compile? [duplicate]

Tags:

string

printf

f#

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"
like image 625
CodeMonkey Avatar asked Jun 28 '26 14:06

CodeMonkey


2 Answers

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.

like image 180
svick Avatar answered Jun 30 '26 13:06

svick


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

let test = "aString"
let callMe = printfn (Printf.TextWriterFormat<_> test)
callMe
like image 27
Shawn Eary Avatar answered Jun 30 '26 15:06

Shawn Eary



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!