モナド基礎勉強会 参加・LTしました + 【重要】発表内容の訂正
by Yuji Yamamoto on March 23, 2015
3月21日土曜日、名古屋で行われたモナド基礎勉強会に参加し、LTしました。
後れ馳せながら感想記事です。
知ったこと
やはり想像通りの難しさで内容の9割は理解できなかったように思いますorz
事前にLTのために初歩的な部分は理解したつもりだったので結構行けるかな、と思いましたが甘くないですねー。
そんな中でもふんわりと理解できたこととその印象を。(一部、@khibinoさんからアドバイスを元に得た理解もあります。)
- 圏論の基礎は全部読むんじゃなくてリファレンス的に持っておくといいそうですね!特に前書きは地雷らしい。
- モナドが「モノイド対象」たるゆえんは
join
が結合則を満たすところにあるそうです。だからjoin
はあんなに持ち上げられる 1のか… Free
モナドは「algebraの圏」。Abstract Syntax Treeを作る。対象は「式M aを評価してaを取り出す評価の仕方(一つのセマンティクス)」で射はよくわかんなかった!- 確かに改めて定義を見るとTreeっぽい。
- 「M a」と聞きますとラムダ項を思い出しますが、多分関係あるんでしょうね。というかそのもの?
- Monatron、名前がなんかかわいい(?)。Yet another mtlらしい。
- 一番よく理解できたのは@mzpさんの「IOモナドを実装してみた」でした。まぁ、そんなに数学数学した話をしてないからですけど…。
- GHCの
IO
が線形論理を基礎に作られている、というのは意外でした。一意型ってまさかそんな意味だったとは…。実装がよくWorld
を隠蔽で来てる証ですね。
- GHCの
- 共変Hom関手、確かにReaderっぽい。
- ちゅーんさんの発表からのコピペで恐縮ですが…
- Operationalは、APIを書き連ねる所から設計がはじまる。
- Operationalなら、API設計と実装部分は完全に切り離す事ができる。
<*>
は「applied over」と読むらしい。- Scala, 複雑な型宣言は辛い。でも今後Scala派の人とも仲良くすることになるかもだし、理解したほうがいいのかも。
objective
, 難しそう。そしてなんでHaskellやのにオブジェクト使わなならんねん感ある。発表者本人のこの発言通り常に必要というわけではないみたいだけど…。
その他、どんな話題が出たか、などは@hirataraさんの記事やtogetterをご覧ください。
話したこと
こちらが発表時のスライドです。
参加してない人のためを思って最初から詳しめに書いているので、読んでいただけると幸いです 2。
例のごとくSlideshareにも上げました。
当日1週間前を切ってもほとんどなんにも書けず、何度もLT枠をキャンセルして「浸される枠」に移ろうかと思い悩みながら書きましたが、
結果的にはTL上でも懇親会上でも良い反応を頂けてすごく嬉しかったです。
特に、「圏論を真面目に勉強してる人の気を害さないだろうか」という点が懸念材料でしたが、杞憂だったようでホッとしました。
喜びの声がtogetterのこの辺にも上がっております!みんなありがとう!
また、今回まがいなりにも圏論をちょっとかじってみて、少しでも理解できたのが面白かったです。
圏論の基礎を読むなりしてこれからも少しずつ勉強してみます。
ついでに、私が参考にした資料も一応貼っておきますね。
- Haskell for all: The category design pattern
英語で恐縮ですがめちゃめちゃ分かりやすかったです。Haskellやその他プログラミングで使われる概念とのつながりを大変明瞭にしてくれました。 - Haskell for all: The functor design pattern
上の続き。こちらも同様に素晴らしい。 - 簡約!? λカ娘 Go!の第4章「殺物語」
実は僕にとって圏論への入り口はここでした。簡潔にまとまっていて、いい入口になったかと思います。 - 灘校パソコン研究部 部誌の「圏論によるプログラミングと論理」
こちらは肝心の圏論的な部分がほとんど読めてませんが、これからおいおいと…。
【重要】発表内容の訂正
おっと、それと大事なことを忘れておりました。掲題通り発表内容に一部重要な誤りがあったので訂正します。
ニートはMonad
ではありませんでした。
data NotWorking = NotWorking
instance Monoid NotWorking where
mempty = NotWorking
mappend = const
type Neet = Const NotWorking
ニートはConst NotWorking
なので 3、Const a
がそうであるようにApplicative
ではありますがMonad
ではありません。
この場を借りて訂正させていただきます。大変失礼いたしました。
最後に感謝など
第一に@khibinoさん、 Haskellもくもく会で会場を貸していただいたり、 わからないところを教えていただいたり、以前から大変お世話になっております。 今回はお昼にばったりお会いした時から会の終了までご一緒させていただきましたが、要所要所で興味深いアドバイスをいただき、良い刺激となりました。 ありがとうございます。 次回のHaskellもくもく会も、ぜひよろしくお願いします!
第二に@kyon_mmさん、企画、会場の手配、お菓子の差し入れなど諸々本当にありがとうございました。 今回の企画がなければ私の名古屋関数型帝国行きはまた遠のいていたことでしょう。
そして発表者の方々含め参加者の皆さん、興味深い発表をお聞かせいただいたり、私の拙い発表を聞いていただたりして本当にありがとうございました。
初名古屋は本当に楽しかったです!