似たものを比較することで、いままで気づかなかった新しい知見が得られることがあります。 などと、小難しい言い方をしなくても、1つ1つ勉強していてもよく分からなかったものが、2つ並べて勉強すると、よく分かったりすることありますよね。 Monadの応用例でよく出るState MonadとWriter Monadですが、よ〜く考えると似ています。この2つを比較すると、Writer MonadはState Monadの特殊な場合と理解することができてしまいます。 State MonadとWriter Monadを見比べる まずは、比較しやすいように表記を工夫した俺々実装です。 newtype MyWriter a = MyWriter { runWriter :: ( a, [String] ) } instance Monad MyWriter where return a = MyWriter