もなもなモナド 番外編

ちらっと見かけたhaskell学習中の方のモナドに対する感想があまりに素晴しく見えたので引用。

Unixがコマンドをパイプでつないで、複数のプロセスがストリームを介して連携して動いているようにもみえるし、 ドミノをたくさん立て、シーソーや滑り台、水が一杯入ったグラス、様々な仕掛けを巧妙に配置した後、最後に華麗に倒すような、そんな風にも見えます。 うーむ、どうなっているんだろう?

まさにそれ!その両方!
外からみると、モナドをbindしていくのはUnixコマンドをパイプで連結していくのと同じ。bind(>>=)一発で複数のモナドががちゃっと繋がる。でもストリーム一本でしか繋がらないわけじゃなくて、接続部分の中を見ると実はいろいろと複雑な繋ぎ方ができるようになっている。
中は複雑なのに、外から見ると単純なのは、様々な仕掛け(モナド則の制約と、それを満たす型クラスの実装と、do記法)が巧妙に配置されているから。そのおかげでプログラマはbindだけでいろんな処理を単純に繋げられるし、そして最後には複雑な接続部分も含めて全てが華麗に倒れてくれる。

モナドが難しいのは、中の仕組みが外に見えないからだろうな。プログラマから中の複雑さを見えなくするところこそがモナドの良さなんだけど。学習効率を下げている原因が、利点そのものだなんて。悩ましい。モナドを使ったソースを、モナドを使わないソースに変換してくれるツールがあると学習しやすいかもな。んーでも、IOモナドの中身は簡単にはのぞけないのか…。