私がモナドをもふもふする過程でつまずいたこと
ここ数日モナド解説が流行ってるらしいので解説してみようと思ったけれど、解説できるほどモナドを理解していなかったので、私がつまずいた事をだらだらと。
モナドは特定の言語の概念ではない
モナドといえばHaskell、Haskellといえばモナドみたいなイメージを持ちがちだけど、モナドはHaskellだけのための何かではない。 また、純粋関数型言語だけの概念でもない。
IOだけがモナドではない
簡単なはずの文字出力を、Haskellでしようとするといきなり現れて、多くの人にとって初モナドとなる事が多いと思われるIOモナド。でも、別にこれだけがモナドでは無い。
モナドと副作用は関係ない
関係ない、は言い過ぎかもしれないけれど、 副作用の無い操作でもモナドは有用だし、 副作用をごく普通に使う言語(C#とか!)でもモナドは有用。
モナドはインターフェイス
モナドは取り扱いを定めてるだけで、その意味や動作は個々のモナド(のインスタンス)により様々。
モナドで包んだ値を取り出したっていい
モナドのインターフェイスにはモナドで包まれた値をそのまま取り出す操作が無いために、副作用などを参照透明に実現できる。でもそれだけがモナドの価値ではない。 たとえばHaskellのMaybeなどは、パターンマッチで容易に中の値を取り出せる。