何が魅力的なシナリオを用いMonadsクライアントまで、フルのC#
質問
私の状況るということはあって乳児の理解Monads.だったので、様々なスレッドにMonadsこちらから、数時間の研究に世界的に普及しつつある。ほとんどのものだと思うのであっ 一般的に かMonadがいます。
私C#者は改善させます。だったら私のMonaducationが見えて実世界のプMonadクライアントまで、フルのC#(を介してlinq SelectMany()またはsomesuch)がはっきり確認できる改善をもたらすその他の方法での解決と同じような問題oldskool C#.
は誰でも見たような獣?
解決
ここでは、そのようなシナリオです:あなたは、パースライブラリー(埋め込みDSLの良い例)をオーサリングしたい、とあなたは最高のものは、モナドパーサコンビネータライブラリであることを発見します。だから、それはあなたが解析している言語の文法と同じ構造を持つC#コードの作成にLINQ構文糖を活用書き、そしてあなたは、オンザフライ意味解析とエラー回復のための素晴らしいプログラミングモデルの利点を得ます。説明のためにこのブログを参照してください。
他のヒント
ピタゴラスのトリプルを探すます:
var r = from a in Enumerable.Range(1, 25)
from b in Enumerable.Range(a, 25-a)
from c in Enumerable.Range(b, 25-b)
where a*a + b*b == c*c
select new [] { a, b, c };
ここではそのようなシナリオです:あなたは、スレッドを保持せず、シーケンシャル非同期呼び出し(例えばIO)を行うコードを書きたい、しかし、あなたは非同期プログラミングモデル(BeginFoo / EndFoo)スパゲッティの絶望的なもつれを書きたくはありませんあなたを強制します。だから、モナドとLINQ糖を使用して、直線に見えるが、それは/が全体のスレッドを切り替え解放するコードを書くことができます。簡単な説明のためのこのブログを参照してください。
例えば、簡素化 null
チェックを使っmonadて この記事.
LINQはStackOverflowの上ここでは多くのソリューションで使用される(そして多くの場合、質問で要求されます)。 LINQ のタグが付けられた質問を見直し、あなたは現実世界の使用状況が表示されます。
プログラミングmonadsは、宣言的記述したいものを高いレベルより低レベルの内容を出すにはどうしたらいいんです。
を参照 演習の の ブライアン-ベックマンの状態-monad話チャンネル9の.
私は最近、典型的な不可欠のリファクタリングについてのブログ機能、モナドスタイルに実世界のC#コード( NuGet の中の関数)(より具体的には、使用してのかもしれませんモナドの)。私はステップの後ろに合理的に説明する、小さなステップでそれを行うには、私のベストを尽くしたので、私はそれはモナドが有用でどのように理解するのに役立ちますだと思います。