おさかな日誌

魚類がプログラミング

「X がモナドである」はなにが嬉しいのか

この記事はぼくの考えを雑に文章化したものであって、不正確な可能性が特に高いので気をつけてくださいね。


ごくたまに「X はモナドだったんだ」のような発言をすることがある。これは自分が理解しようとしている対象 X が、自分がすでに理解している概念であるモナドの性質を持っていることがわかったことで対象 X への理解が進んだ時に主に発していると思う。これは別にモナドにかぎらず、「あ、Strategy パターンだ」とか他にもある。

さて、「X がモナドである」とわかった時になにが嬉しいのかいまいち言語化できてなかったのだけど、今日 関数型プログラマのための Rx 入門(後編) を読んでいて不意に Applicative Functor について調べた時に、自分が 「X がモナドである」とわかった時の嬉しさが明瞭になった。

インターネット上でもたまに「X がモナドである」という発言を目にすることがある。「X がモナドである」とわかるとなにが嬉しいのかわからない人がこの記事を読んで、なるほどと腑に落ちることを目指してこの記事を書いてみる。

「X がモナドである」がわかると、X が次のような性質を持っていることがわかる(はず)

  1. X はふつう世界の型をラップするような型であること (Functor の性質)
  2. ふつうの世界の関数を X の世界の関数に写すことができること (Functor の性質)
  3. X の世界の関数を X の世界の値に適用できること (Applicative Functor の性質)
  4. X の世界の型をさらにラップした X(X) な世界の型を X の世界の型に写すことができる (Monad の性質)

ここでいう "世界" というぼうが勝手に作った一般的でない用語は、パラレルワールドものの世界線を超えて同時に存在(しているように見える)世界とかを想像してもらえるといいかもしれない。

「X がモナドである」ことがわかるとこれだけのことがわかって便利。もちろんこれだけしかわからないから「X がモナドである」ことがわかっても X についての理解はそこまで進んでない。それでも「X がモナドである」という発言が実際の理解以上の喜びを含んでいるのは、慣れ親しんだモナドをこれから学ぼうとする新しい領域にも見つけた喜びのせいに違いない、きっとそうだ。