モナドは関数合成の抽象化

以前にモナドについて書いたのですが、どこかで書かれていた「モナドは関数合成の抽象化」という表現がなんとなくしっくりきました。

合成戦略を各モナドインスタンスが担う、と。

それから do構文について。最初、do構文は複文を実現するための機構なのかな、と思ってましたが違うんですね。モナドを連結してより大きなモナドを作るブロックと考えると解りやすいです。なので同じ型のモナドでなければならない。IOモナドとSTMモナドがそれにより安全性を保障している事にちょっと感動しました。

まぁ do構文が bind の syntax sugar であることを考えれば当たり前のことなんですが。