だから、私はf#の計算式やカスタムビルダーにかなり慣れてきました。私は日々の仕事の大部分をC#で行う必要がありますが、LINQ式は自分のモナド/モノイドで使いたいと思っています。 f#のZero
メソッドへのC#アナログがあるかどうか誰かが知っていますか?f#のbuilder.Zero()のLINQに相当しますか?
ここで私はF#で行うものです:
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() = Option.None
let option = OptionBuilder()
// Example usage (I want something similar from c#)
let t : Option<int> =
option { if false then return 5 }
実際、 'where'は結果がゼロモードであるというセマンティクスを持たなければなりません。それは良い洞察です。これから私たちは次のようなものを見ることができます: 'IObservable'モナドのゼロは 'OnNext'を決して呼び出さない観測可能なシーケンスでなければなりません。それで、小さなパズル: 'Task 'のゼロは何ですか? –
結果を論理的に返すことはできないため、選択肢は1つだけです: 'Task.FromCanceled(new CancellationToken(true)) ' – Asti
これは妥当な選択ですが、唯一の選択ではありません。他の可能性は、例外の完了を持つ別のタスク、または永遠に実行され、完了しないタスクです。 –