JSDeferredは想像していたものとだいぶ違った。
next(f1).next(f2).next(f3)で実行すべきタスクを組み立てた後でまとめて実行するのかと思っていたけど、next(f1)の時点でf1は実行されるんだな。
西尾さんが「 JSDeferred ってもしかしてモナド?」って言ってて、「いやそれはちゃうでしょう」とモナドまだわかってないくせに断言してみたりしていたのだが、上の記事を読んで西尾さんが「 JSDeferred ってもしかしてモナド?」と思った理由がわかった。
関数言語成分が多めな人には処理の順序をパッケージ化することがモナドの本質(本来の目的)で、数学成分が多めな人には結合則がモナドの本質(欠けてはならないもの)なんだろうな。なるほど。
まだ??%くらいしかわかってないが(??は0以上100未満)、とりあえず Haskell のモナドをやるのに圏論は不要ということを飲み会で熱弁することくらいならできそうだ。
結合則まで含めて説明できる、圏論ではないなにか別のモデルがあると良さそうという直感はあるんだけどなあ。
とりあえず自分用モナド勉強リンク。
- モナドのすべて
- http://www.sampou.org/haskell/a-a-monads/html/
- モナドの物理的なアナロジー
- http://www.sampou.org/haskell/a-a-monads/html/analogy.html
- 関数言語成分多めの人はこれでOK。手続き型な人には「だから?」、数学成分多めだと「ちょっと違うでしょ」。
- モナド (プログラミング) - Wikipedia
- http://ja.wikipedia.org/wiki/%E3%83%A2%E3%83%8A%E3%83%89_%28%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0%29
- モナド (圏論) - Wikipedia
- http://ja.wikipedia.org/wiki/%E3%83%A2%E3%83%8A%E3%83%89_%28%E5%9C%8F%E8%AB%96%29
- 関手 - Wikipedia
- http://ja.wikipedia.org/wiki/%E9%96%A2%E6%89%8B
- 圏 (数学) - Wikipedia
- http://ja.wikipedia.org/wiki/%E5%9C%8F_%28%E6%95%B0%E5%AD%A6%29
- Monadの講義をYoutubeで
- http://kashino.exblog.jp/6181606/