#Monadは実用的には、「舞台裏を隠すためのデザインパターン」と考えることができる。Monad則に従ってインタフェースを作っておけば、裏で支えてるスタッフの動き(入出力とかStateとかいろいろ)は隠されて、表で直接触りたいデータの操作だけを書いておけばいい。
#でも、「舞台裏を隠す」という抽象化が目的なら、Lisp族にはもっとふさわしい方法がありそうだ。
#f :: a
g :: b
h :: a -> b -> c
#というパーツがあって、例えば状態を持ち回りながら f と gの結果をhで使いたい、なんて場合に、
#いやこれだと例が良くないか。
#f :: m a
g :: m b
h :: a -> b -> m c
#にしとこう。
#do a <- f
b <- g
h a b
#と書いてmがついてないかのように振る舞えるわけだけど、素直に h f g と書くのとはコードが変わっちゃうよね。m無しで書いてたコードに後づけでStateを持ち回りたくなったら、コードはやっぱり書き直さないとならない。
#でもLisp族の場合、マクロで任意のコード変換が可能だから、「この部分式内では値に余分な情報mがくっついてるぞ」という情報さえ与えてやれば、
#(h (f) (g)) という式をmを持ち回るように裏で変形してやることはできるはず。
#つまり、見た目のコードをまったく変えずに、舞台裏をすげ替えることができるんじゃないだろうか。
#世間ではGoogle Phoneが話題だが、2年前くらいから仕事で作ってたとあるインハウス向けのサブシステムの名前が"Nexus1"であった。ちなみに"Nexus2"というのも作った。