計算を発現しない実行しましょう
-
23-08-2019 - |
質問
を使用してい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.
他のヒント
正しい--できなくなりを拘束しよう:(.
所属していません StackOverflow