怖いScalaで発表してきた and 補足説明

http://xuwei-k.github.io/slides/kowai_scala
http://connpass.com/event/4112/


モナド(とScalaz)を説明しようと思った動機

"怖いScala"という勉強会タイトルだったので(本当はそこまで怖くないのに)必要以上にScala界隈で怖いと思われている(?)モナドを説明しよう

短い発表時間でモナドのすべてを説明するのは無理なので、少し変わった説明にしよう

モナドとは何か?(what)」のみを説明して
「なぜモナドは便利なのか?(why)」「それぞれのモナドはどのように使うのか?(how)」「具体的にどんなモナドがあるのか?」は説明しない

がくぞーさんの、以下のようなtweetがありましたが

端的にいうと、konn-sanと同意見です。

モナドは何?(what)」のみを説明したら、「特定の型の関数の組が存在して」「それらがある法則を満たす」
以外のなにものでもありません。
モナドは何?(what)」を言うには「ある法則を満たす」は外せなかったので「その法則をいつ覚えるべきか?」は関係なく、「法則が存在するという事実」に触れました。


言い訳っぽいずるい言い方に聞こえるかもかもしれませんが
「特定の型の関数の組が存在して」「それらがある法則を満たす」
だけがわかっても、逆に「だからなんなの?」となるだけです。というかそういう反応をわざと期待して資料作り and 発表をしました。*1その2つだけでは、プログラミングに直接役立つことは何も述べていません。しかし「モナドとは何?(what)」と問われたら、ある意味それが答えだと思うのです。


というわけで、たとえば以下のような反応を貰いました(?)が

山本さんの言ってることも、とても正しいです。(むしろ、自分も最初にモナド則覚えろとはいってないし、"法則の存在"を紹介しただけです。) *2
ただ、「モナドとは何(?)」と「モナドはどのようにプログラミングで役にたつの?」「モナドはどのように便利なのか?」という質問を分けた場合には
「Parserも、特定の関数の組(Haskellだとbindやreturn)を実装できて、それらがモナド則も満たすのでモナドである」
が前半の「モナドとは何?」の質問の答えあって
「Parserをモナドにすると、言語内DSLのようになって便利で嬉しい」
は後半の「どのように役に立つのか?」のほうの答えです。



自分で書いてても「だからなんだよ」という気になってきましたが、これ以上書いても余計微妙な感じになる気がするので、このくらいにしておきます。


あと、最後にみずしまさん、1分前知らせなくてすいませんでした・・・



追記:
「ScalazにおけるMonad則が実は13個」とかそのあたりがとてもわかりにくかったらしく*3twitter上で補足説明したものをtogetterにまとめておきました
http://togetter.com/li/596383

*1:その狙いを理解してくれた人がどのくらいいたのか微妙ですが

*2:というか最初からスライド中で「自分で新しいモナド定義する」場合以外は(ryって、山本さんと全く同じこと言ってます

*3:まぁHaskellとかなり違っていて独特なので、わかりにくいのは当然である