言語ゲーム

とあるエンジニアが嘘ばかり書く日記

Twitter: @propella

ぼくがかんがえたモナド

分かってないままに適当こいて今の理解を書きます。モナドとは、プログラムの行う動作のうち、データの流れとデータの加工を別々に書いて別々に抽象化するものなのかなという感想を抱いています。unix プログラミングで言うとコマンドが関数でシェルのパイプ操作がモナド。Max や Pure Data などのビジュアル言語で言うと、数値処理が関数で音響処理がモナドVisualBasic で言うと GUI で作るのがモナドで Basic で書くのが関数(これは無理やりか)。

パイプがバイト列、音響信号がサンプリング情報と決まったデータしか扱えないのに比べて、モナドで抽象化すると入り口と出口があるデータの流れを統一的な方法で何でも記述する事が出来ます。これは凄い発明だ。構造化プログラミングで処理を抽象化し、オブジェクト指向が情報を抽象化したように、モナドは情報の流れを抽象化します。

情報の流れを抽象化するというのは、別にモナドなんか持ち出さなくても普通にプログラマが頭の中でやってる事だけど、for ループが「ループ」という動作を明確にしたように、モナドが情報の流れを明確にする事は、脳みその負担を和らげるのにすごく訳に立つと思います。このモナドというのは関数型言語の制限から逃れるために出来たと言いますが、瓢箪から駒と言いますか、ほんと、すばらしいです。