単一のstringやオブジェクトを標準出力に出力するには？


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

[code]

    var str = "example;
    Console.WriteLine(str);
    Console.WriteLine(DateTime.Now);
    
[/code]

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

[code]

    let str = "example"
    printfn str
    printfn DateTime.Now
    
[/code]

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

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

[code]

    printfn "%s" str
    printfn "%O" DateTime.Now
    
[/code]

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

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

* * *
[code]

    Console.WriteLine str
    Console.WriteLine DateTime.Now
    
[/code]

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

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




[F#のPrintfモジュール](https://msdn.microsoft.com/ja-
jp/visualfsharpdocs/conceptual/core.printf-
module-%5Bfsharp%5D)は[OCamlのPrintfモジュール](http://caml.inria.fr/pub/docs/manual-
ocaml/libref/Printf.html)を基にしています。ですので`System.Console`はあまり意識されていません。例えば`CurrentCulture`を無視しますので

[code]

    System.Globalization.CultureInfo.CurrentCulture <- System.Globalization.CultureInfo "de"
    System.Console.WriteLine("{0:f2}", 12.34)  // 12,34
    printfn "%.2f" 12.34                       // 12.34
    
[/code]

といった違いもあります。ですのでOCaml風フォーマッタと考えるべきかと思います。  
（その割に`printfn`とか日和った関数があるんですよね…。）




[F#のPrintfモジュール](https://msdn.microsoft.com/ja-
jp/visualfsharpdocs/conceptual/core.printf-
module-%5Bfsharp%5D)は[OCamlのPrintfモジュール](http://caml.inria.fr/pub/docs/manual-
ocaml/libref/Printf.html)を基にしています。ですので`System.Console`はあまり意識されていません。例えば`CurrentCulture`を無視しますので

[code]

    System.Globalization.CultureInfo.CurrentCulture <- System.Globalization.CultureInfo "de"
    System.Console.WriteLine("{0:f2}", 12.34)  // 12,34
    printfn "%.2f" 12.34                       // 12.34
    
[/code]

といった違いもあります。ですのでOCaml風フォーマッタと考えるべきかと思います。  
（その割に`printfn`とか日和った関数があるんですよね…。）

