http://xuwei-k.github.io/slides/kowai_scala
http://connpass.com/event/4112/
モナド(とScalaz)を説明しようと思った動機
↓
"怖いScala"という勉強会タイトルだったので(本当はそこまで怖くないのに)必要以上にScala界隈で怖いと思われている(?)モナドを説明しよう
↓
短い発表時間でモナドのすべてを説明するのは無理なので、少し変わった説明にしよう
↓
「モナドとは何か?(what)」のみを説明して
「なぜモナドは便利なのか?(why)」「それぞれのモナドはどのように使うのか?(how)」「具体的にどんなモナドがあるのか?」は説明しない
↓
がくぞーさんの、以下のようなtweetがありましたが
比喩は害悪は同意だなー。最近はこの記事がわかりやすいと思ってた。 URL #fud_scala
2013-11-28 20:15:57 via web
端的にいうと、konn-sanと同意見です。
「モナドは何?(what)」のみを説明したら、「特定の型の関数の組が存在して」「それらがある法則を満たす」
以外のなにものでもありません。
「モナドは何?(what)」を言うには「ある法則を満たす」は外せなかったので「その法則をいつ覚えるべきか?」は関係なく、「法則が存在するという事実」に触れました。
言い訳っぽいずるい言い方に聞こえるかもかもしれませんが
「特定の型の関数の組が存在して」「それらがある法則を満たす」
だけがわかっても、逆に「だからなんなの?」となるだけです。というかそういう反応をわざと期待して資料作り and 発表をしました。*1その2つだけでは、プログラミングに直接役立つことは何も述べていません。しかし「モナドとは何?(what)」と問われたら、ある意味それが答えだと思うのです。
というわけで、たとえば以下のような反応を貰いました(?)が
モナド則とか、理解しなくてもいいですって。分かれば当たり前のことだし、分からなくてもプログラムは書けるし。教えちゃうから、分からないってなっちゃう。知らないといけないのは、モナドを自分で作るようになってから。
2013-11-28 22:04:44 via web
モナドって文字を見たら、言語内DSLに変換して下さい。たとえば、Parser モナドは、Parser 用の DSL です。
2013-11-28 22:09:06 via web
山本さんの言ってることも、とても正しいです。(むしろ、自分も最初にモナド則覚えろとはいってないし、"法則の存在"を紹介しただけです。) *2
ただ、「モナドとは何(?)」と「モナドはどのようにプログラミングで役にたつの?」「モナドはどのように便利なのか?」という質問を分けた場合には
「Parserも、特定の関数の組(Haskellだとbindやreturn)を実装できて、それらがモナド則も満たすのでモナドである」
が前半の「モナドとは何?」の質問の答えあって
「Parserをモナドにすると、言語内DSLのようになって便利で嬉しい」
は後半の「どのように役に立つのか?」のほうの答えです。
自分で書いてても「だからなんだよ」という気になってきましたが、これ以上書いても余計微妙な感じになる気がするので、このくらいにしておきます。
あと、最後にみずしまさん、1分前知らせなくてすいませんでした・・・
追記:
「ScalazにおけるMonad則が実は13個」とかそのあたりがとてもわかりにくかったらしく*3、twitter上で補足説明したものをtogetterにまとめておきました
http://togetter.com/li/596383