質問

を使用していF#v1.9.6.2かを定義し、それは非常に簡単な計算式:

type MaybeBuilder() =
    member this.Let(x, f) =
        printfn "this.Let: %A" x
        this.Bind(Some x, f)
    member this.Bind(x, f) =
        printfn "this.Bind: %A" x
        match x with
        | Some(x) when x >= 0 && x <= 100 -> f(x)
        | _ -> None
    member this.Delay(f) = f()
    member this.Return(x) = Some x

let maybe = MaybeBuilder()

んを交えてメー諸表のコードのような方法ることが求められている計算の表現です。私の実行を以下の声明を発表した。

maybe {
    let x = 12
    let! y = Some 11
    let! z = Some 30
    return x + y + z
}

期待しているコンソールを印刷する場合は、以下の

this.Let 12
this.Bind Some 12
this.Bind Some 11
this.Bind Some 30

私の実際の研究成果は以下の通りである。

this.Bind: Some 11
this.Bind: Some 30

つまり、F#なれを実行する Let ます。私が書き Let 例外をスローするには、コードなしで実行。また、私のコメント Let 会員が完全に、 ない エラーメッセージを記載 The field, constructor or member 'Let' is not defined, このコードを実行しました。

(たって調査コードの反射板としては、通常の場合、decompiled F#は難号化した超えて読む)

というの スペックのための計算表現 が変わりました。は let バインディングされなくなったとして構文糖の Let 会員長に必要な計算ワークフロー?

役に立ちましたか?

解決

またその答えます。から F#仕様 がどのように計算表現訳

{| let binds in cexpr |}C  = let binds in {| cexpr |}C)

ないする必要がなくなり、より快適な定義するよう明示的にも、翻訳、コンパイラです。

更新:この変更に記 詳細なバージョンのリリースノートには、CTP.

他のヒント

正しい--できなくなりを拘束しよう:(.

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top