勉強会に行ったり、ブログや本を読んだりいろいろしたけど、モナドってなんなんすかね。(´・ω・`) 状態だった僕ですが、分解して、図解してみたら少しわかった気がするので、エントリーしてみる。 「プログラミングHaskell」のP106によると、IOモナドとは、以下の形をしているらしい*1。 type IO a = World -> (a, World) そして、次のページにバインド(>>=)の実装が以下のように書かれている。 (>>=) :: IO a -> (a -> IO b) -> IO b f >>= g = \ world -> case f world of (v, world') -> g v world' はい。一気にギアが上がりましたね。(´・ω・`) 全然分かんない。(´・ω・`) ということで、これを分解して図解するのがこのエントリーの趣旨です。 IO a について ま