29

標準のF#ライブラリにオプション(多分)wokflow(モナド)はありますか?

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

4

3 に答える 3

24

オプション用の標準的な計算ビルダーはありませんが、怠惰のようなものが必要ない場合(リンクした例に追加されているように)、コードは十分に単純なので、それを信頼しない理由はありません(特に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()
于 2011-10-19T14:43:02.937 に答える
17

標準のF#ライブラリには多分モナドはありません。FSharpxは、F#コミュニティの高度な資格を持つメンバーによって作成されたF#拡張機能であり、非常に多くの有用なモナドがあります

于 2011-10-19T08:13:58.503 に答える
1

nugetで利用できるオープンソースライブラリFSharp.Interop.NullOptAbleを作成しました。

オプションワークフローとして機能するだけでなく、nullまたはnull許容ワークフローとしても機能します。

let x = Nullable(3)
let y = Nullable(3)
option {
    let! x' = x
    let! y' = y
    return (x' + y')
} (* |> should equal (Some 6) *)

同様に動作します

let x = Some(3)
let y = Some(3)
option {
    let! x' = x
    let! y' = y
    return (x' + y')
} (* |> should equal (Some 6) *)

あるいは

let x = "Hello "
let y = "World"
option {
    let! x' = x
    let! y' = y
    return (x' + y')
} (* |> should equal (Some "Hello World") *)

そして何かがnullまたはNone

let x = "Hello "
let y:string = null
option {
    let! x' = x
    let! y' = y
    return (x' + y')
} (* |> should equal None *)

最後に、null許容型のものがたくさんある場合は、cexprを使用します。何かがあるchooseSeq {}場合は、 /それが生成されません。yield!nullNone

ここで他の例を参照してください。

于 2018-04-29T18:45:42.093 に答える