モナド その1
モナドとは、Haskellの既存の型を拡張するための統一的な枠組みのことで、モナドをもちいることで、純粋な関数型言語で扱いにくい入出力や状態の保存・更新などの処理を陽に意識せずに簡単にできるメリットがあるそうです。
http://www.sampou.org/haskell/a-a-monads/html/
によると、
Haskell ではモナドは型構築子(これを m と呼ぶことにします)、その型の値を構築する関数(a -> m a)、および、その型の値とその型の値を生成する計算とを組合せて、その型の新しい計算を生成する関数 (m a -> (a -> m b) -> m b) で表現されます。
とのこと。
Haskellの世界に限定していうと、モナドはMonadという型クラスのインスタンスであらわされます。
Monadクラスの定義をみてみると、中心は以下のようになっています。
class Monad m where (>>=) :: m a -> (a -> m b) -> m b return :: a -> m a
m が 型構築子
(>>=) が「その型の新しい計算を生成する関数」
return が「その型の値を構築する関数」
になっていることがわかります。
またも引用
おおざっぱに言うと、モナドの型構築子は計算の型を定義し、 return 関数はこの計算の型のプリミティブな値を生成し、 >>= はこの型の計算を組み合わせて、この型のより複雑な計算を作り出します。
とのこと。
と、いろいろとあたった資料をまとめてみましたが、正直いまいちピンときてません。
深く理解するためには、精進が必要ですな。