モナモナ言うモナド入門.tar.gz
DESCRIPTION
「モナモナ言うモナド入門」の短縮版。TRANSCRIPT
モナモナ言うモナド入門.tar.gz
2012-11-18 hiratara
100分で話して来た
超短縮版
話す内容
• 抽象化オタクの更なる高みを目指す
• 「モナドは自己関手の圏のモノイド」という雑学
大統一理論2
お題
Monoid則とMonad則は統一できるか?
そのときPhilip Wadler
の脳裏に閃光が走った!
※この話はフィクションです
モノイダル圏双関手□と自然同型α、λ、ρがある圏
A
A’
B
B’
A□B
A’□B’
f g f□g
(モノイダル圏の)モノイド
(M□M)□M M□(M□M)
M□M
M□M
M
α
μ□M
M□μ
μ
I□M M□M M□I
M
η□M M□η
μλ ρ
Monoid a(1)
(a, a), a a, (a, a)
(a, a)
(a, a)
a
prod (mappend’, id)
prod (id, mappend’)
mappend’
mappend’
\((x, y), z) -> (x, (y, z))
prod (f, g) (x, y) = (f x, g y)mappend’ = uncurry mappend
Monoid a(1)
(a, a), a a, (a, a)
(a, a)
(a, a)
a
prod (mappend’, id)
prod (id, mappend’)
mappend’
mappend’
(x <> y) <> z = x <> (y <> z)
\((x, y), z) -> (x, (y, z))
prod (f, g) (x, y) = (f x, g y)mappend’ = uncurry mappend
prod (mempty’, id)
Monoid a(2)
((), a) (a, a) (a, ())
a
prod (id, mempty’)
mappend’
snd fst
mempty’ = const mempty
prod (mempty’, id)
Monoid a(2)
((), a) (a, a) (a, ())
a
prod (id, mempty’)
mappend’
snd fst
mempty <> x = xx <> mempty = x
mempty’ = const mempty
prod (mempty’, id)
Monoid a(2)
((), a) (a, a) (a, ())
a
prod (id, mempty’)
mappend’
snd fst
mempty <> x = xx <> mempty = x
”集合”mempty’ = const mempty
Monoidは集合圏のモノイド
モナド則
• 以下と同値join . fmap join = join . joinjoin . fmap return = join . return = id
• 証明は http://ja.wikibooks.org/wiki/Haskell/
%E5%9C%8F%E8%AB%96 を参照
Monad m(1)
m m m a m m m a
m m a
m m a
m a
join
fmap join
join
join
id
Monad m(1)
m m m a m m m a
m m a
m m a
m a
join
fmap join
join
join
id
join . fmap join = join . join
return
Monad m(2)
m a m m a m a
m a
fmap return
join
id id
return
Monad m(2)
m a m m a m a
m a
fmap return
join
id id
join . fmap return = id join . return = id
return
Monad m(2)
m a m m a m a
m a
fmap return
join
id id
”自己関手”
join . fmap return = id join . return = id
Monadは自己関手圏のモノイド
まとめ
• 同じ図で法則をまとめれるのはイイ
• 書きかけの検証用ソースhttps://gist.github.com/4104020