2011-10-19 10 views
23

スタンダードF#ライブラリにオプション(多分)wokflow(monad)はありますか?F#には標準オプションワークフローがありますか?

私はこのワークフローの手作りの実装(12)を見つけましたが、実際に非標準で信頼性の低いコードを私のプロジェクトに導入したくありません。そして、googleとmsdnへの想像を絶するすべてのクエリは、私にどこにそれを見つけるかという手がかりを与えませんでした。

答えて

13

標準のF#ライブラリには多分モナドはありません。かなりの数の有用なモナドを持っている、F#コミュニティの質の高いメンバーによって書かれたF#エクステンションであるFSharpxを見るとよいでしょう。

13

オプションの標準的な計算ビルダーはありませんが、怠惰のようなもの(リンクした例で追加されたもの)が必要ない場合、コードはそれを信頼しない理由がないほど簡単です(特に、 Option.bind標準ライブラリの機能)。これはかなり単純な例です:

type OptionBuilder() = 
    member x.Bind(v,f) = Option.bind f v 
    member x.Return v = Some v 
    member x.ReturnFrom o = o 
    member x.Zero() = None 

let opt = OptionBuilder() 
+2

これに 'Zero'メソッドを追加すると便利です。' member x.Zero()= None'。 'let thisIsNone = opt {2 + 2 = 5の場合は"不可能が起きました "}' –