このブログの更新は Twitterアカウント @m_hiyama で通知されます。
Follow @m_hiyama

メールでのご連絡は hiyama{at}chimaira{dot}org まで。

はじめてのメールはスパムと判定されることがあります。最初は、信頼されているドメインから差し障りのない文面を送っていただけると、スパムと判定されにくいと思います。

参照用 記事

「モナド入門」への補足とか応答とか

昨日の「モナド入門」、一晩のあいだにブックマーク数が70近くまで。タイトルでウケたのかしらね? しかしそれにしても、モナドなんかに(って語弊があるな)興味を持つ人がたくさんいるってのは驚きです。技術者の技術的教養がほんとに変化しているのかな?

それはともかく、ブックマーク・コメントに応える形で、補足をしておきます。

  • sshiさん:結論の三つ組とhaskellモナドの対応がよくわからず。

[後日変更 date="20050421"]トラックバックいただいたnanakosoさんのエントリ(http://www3.atwiki.jp/nanakoso/pages/15.html)が、この問題を扱っています。当該エントリーの2回前から順に読むと、extの対応物を求めてラムダの森をさまよい歩く物語として読めます。(=<<)に出会った場面に僕も感動しました。[/後日変更] コメント欄でKMさんにご教示いただいたhttp://en.wikipedia.org/wiki/Monads_in_functional_programmingもいいかも知れません。

“拡張(ext)を使う定義”と“結合律/単位律を使う定義”の関係は、僕のエントリー「モナドの定義とか」で割と詳しく書いています -- 演算子>>=が「拡張+適用」であることはそこでも指摘しました。

  • sshiさん(続き):見る方向の違いか

はい、方向は重要です。g(f(x))のような書き方は、目線が右から左(←)に移動するので、横書きの左から右(→)と食い違って困るんですよ、ほんとにマッタク! 適用や結合(合成;composition)を左から右へと書く記法は大事だと思います。

  • bellbindさん:IOやIORefを模倣するほうがいいような。

確かに入出力を扱えば、実用性と現実感は増すと思います。が、いくぶん難しくなる懸念もあったのでカウンターの例を選びました。

カウントアップとファイル(または他のストリーム)への出力は非常に似ていて、Countupをわずかに変更するだけで出力モナドOutputが得られます。カウンターの増分値を足し算で累積するのと同じように、出力データを連接演算(concat, append)でバッファに蓄積していけばいいだけです。汚れ役CountupMainと同様なOutputMainを準備して、バッファフラッシュをやらせればいいでしょう(が、実際のフラッシュ動作を気にする必要はありません)。

  • ogijunさん:もっと理論的なことが知りたくなった

そう思っていただいた時点で僕の役割は全うしたかと。きっかけがつかめれば、あとは僕みたいな大道芸人の口上を経由しないで、専門的な解説を直接読むことができると思います。

さて、Danさんから「Perlでモナド」なる内容のトラックバックをいただいたのですが、こうなると次はRubyの人が「Rubyモナド」のエントリーを書くんじゃなかろうかと予想かつ期待しているんですが、どうでしょう?