私はFileInfoのシーケンスを持っていますが、文字列の名前だけを気にするので、文字列のシーケンスが必要です。最初は私はこのような何か試してみました:なぜF#の型推論でこれを処理できないのですか?
Seq.map (fun fi -> fi.Name) fis
をしかし、いくつかの理由で、F#の型推論はこれを可能にするのに十分に良好ではない、と私は明示的に 『Fiの』にタイプを与えて作っ:
Seq.map (fun (fi : FileInfo) -> fi.Name) fis
このアノテーションはなぜ必要ですか? fis : seq<FileInfo>
とそのSeq.map : ('a -> 'b) -> seq<'a> -> seq<'b>
が分かっているならば、ラムダ式の型がFileInfo -> 'b
であると推測すべきではなく、次にfi.Name : string
から、その型がFileInfo -> string
であると推測されますか?
私は彼らが型推論をより頑強にすることを願っています。クラスのメソッドを並べ替える必要があった場合や、あまりにも一般的な型のエラーが発生する場合があります。 – gradbot
このブログの投稿とそのコメントのなかには、F#のタイプチェッカーの強みと弱点のいくつかの有用な説明があります:http://neilmitchell.blogspot.com/2008/12/f-from-haskell- perspective.html – Juliet