以下の内容はhttps://lipoyang.hatenablog.com/entry/2024/04/15/222853より取得しました。
分類
- 上記の記事で述べた8つのモナドは、2種類に分類できる。
- 失敗系:List, Maybe, Either
- 状態系:IO, ST, State, Reader, Writer
- モナドには他にも種類があるが、まずはこの2種類を押さえておく。
失敗系 (List, Maybe, Either)
- 失敗系モナドは、本来期待されるデータ型以外に、値が無い(失敗)という値がありうる。
- そのため、エラー処理に利用できる。
- 失敗系モナドは、計算が失敗する可能性がある関数を連鎖させることができる。
- どこかで失敗した場合、その後の計算は行われず、最終結果は失敗になる。
- List を失敗系と呼ぶのは違和感があるが、空リスト [] を値にとりうるのでここに含める。
- Maybe は値が無い (Nothing) という値をとりうる。
- Either は値が無いときにエラー情報の値を持たせることができる。
状態系 (IO, ST, State, Reader, Writer)
- 状態系は、純粋関数型言語である Haskell で状態を扱うために使われる。
- IO は入出力を扱う。また IORef は変更可能な変数のようなものとして利用できる。
- IO の外に値を持ち出すことはできない。(IOがつきまとう。)
- ST は外に値を持ち出すことができる。STRef は変更可能なローカル変数のようなものとして利用できる。
- State は値だけでなく状態も持ち出せる。
- State は連鎖した関数の間で状態を共有してグローバル変数のようなものとして利用できる。
- Reader は読み取り専用の値を共有できる。グローバル定数のようなものとして利用できる。
- Writer は追記専用の値を共有できる。ログを取るために使われることが多い。
ポエム
- 「モナドはジェネリック型のコンテナのようなもの」というのは本質的な理解ではないが、実践的な理解の足掛かりにはなる。
- 「クラスは構造体の拡張のようなもの」というのは本質的な理解ではないが、実践的な理解の足掛かりにはなったのと同じ。
- 「モナドはブリトーのようなもの」みたいなよく分からない比喩は役に立たない。
- 「クラスはたい焼きの型のようなもの」みたいなよく分からない比喩は役に立たなかったのと同じ。
- そもそもブリトーなんて料理食べたことないから比喩として成立しない。
- 「モナドは自己関手の圏におけるモノイド」という説明は、ブリトーと五十歩百歩。
- あれは圏論の教科書の一節であって、群論の基礎知識があると想定される読者への説明。
- モノイドなにそれおいしいのな人には何の説明にもならない。
以上の内容はhttps://lipoyang.hatenablog.com/entry/2024/04/15/222853より取得しました。
このページはhttp://font.textar.tv/のウェブフォントを使用してます
不具合報告/要望等はこちらへお願いします。
モバイルやる夫Viewer Ver0.14