つまりC#で言うところの

var str = "example;
Console.WriteLine(str);
Console.WriteLine(DateTime.Now);

のようなことをしたいのですが、printfn を使った場合、第一引数は常に書式文字列として扱われてしまうため、次のコードはエラーになります。

let str = "example"
printfn str
printfn DateTime.Now

error FS0001: 型 'string' は型 'Printf.TextWriterFormat<'a>' と互換性がありません

このエラー自体は合点がいきますし、次のように書くのが正しいでしょう。

printfn "%s" str
printfn "%O" DateTime.Now

ただ、これだけのために書式文字列を指定するのは無駄な処理をしているように見えます。

Console.WriteLine(string)Console.WriteLine(object) のように、単一の文字列やオブジェクトの出力に特化した関数はないのでしょうか?


Console.WriteLine str
Console.WriteLine DateTime.Now

と直接Consoleクラスのメソッドを呼び出すことはできますが、F#版の関数が用意されているならそれを使った方がいいのでは、と思った次第です。それとも上記メソッドを直接呼び出せばいいのでしょうか。

(標準関数のprintfとクラスライブラリのConsoleみたいな違いを感じているというか・・・)