モナモナ言うモナド入門.tar.gz

25
モナモナ言う モナド入門.tar.gz 2012-11-18 hiratara

Upload: masahiro-honma

Post on 11-Jun-2015

1.432 views

Category:

Documents


0 download

DESCRIPTION

「モナモナ言うモナド入門」の短縮版。

TRANSCRIPT

Page 1: モナモナ言うモナド入門.tar.gz

モナモナ言うモナド入門.tar.gz

2012-11-18 hiratara

Page 2: モナモナ言うモナド入門.tar.gz
Page 3: モナモナ言うモナド入門.tar.gz

100分で話して来た

Page 4: モナモナ言うモナド入門.tar.gz

超短縮版

Page 5: モナモナ言うモナド入門.tar.gz

話す内容

• 抽象化オタクの更なる高みを目指す

• 「モナドは自己関手の圏のモノイド」という雑学

Page 6: モナモナ言うモナド入門.tar.gz

大統一理論2

Page 7: モナモナ言うモナド入門.tar.gz

お題

Monoid則とMonad則は統一できるか?

Page 8: モナモナ言うモナド入門.tar.gz
Page 9: モナモナ言うモナド入門.tar.gz

そのときPhilip Wadler

の脳裏に閃光が走った!

※この話はフィクションです

Page 10: モナモナ言うモナド入門.tar.gz

モノイダル圏双関手□と自然同型α、λ、ρがある圏

A

A’

B

B’

A□B

A’□B’

f g f□g

Page 11: モナモナ言うモナド入門.tar.gz

(モノイダル圏の)モノイド

(M□M)□M M□(M□M)

M□M

M□M

M

α

μ□M

M□μ

μ

I□M M□M M□I

M

η□M M□η

μλ ρ

Page 12: モナモナ言うモナド入門.tar.gz

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

Page 13: モナモナ言うモナド入門.tar.gz

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

Page 14: モナモナ言うモナド入門.tar.gz

prod (mempty’, id)

Monoid a(2)

((), a) (a, a) (a, ())

a

prod (id, mempty’)

mappend’

snd fst

mempty’ = const mempty

Page 15: モナモナ言うモナド入門.tar.gz

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

Page 16: モナモナ言うモナド入門.tar.gz

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

Page 17: モナモナ言うモナド入門.tar.gz

Monoidは集合圏のモノイド

Page 18: モナモナ言うモナド入門.tar.gz

モナド則

• 以下と同値join . fmap join = join . joinjoin . fmap return = join . return = id

• 証明は http://ja.wikibooks.org/wiki/Haskell/

%E5%9C%8F%E8%AB%96 を参照

Page 19: モナモナ言うモナド入門.tar.gz

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

Page 20: モナモナ言うモナド入門.tar.gz

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

Page 21: モナモナ言うモナド入門.tar.gz

return

Monad m(2)

m a m m a m a

m a

fmap return

join

id id

Page 22: モナモナ言うモナド入門.tar.gz

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

Page 23: モナモナ言うモナド入門.tar.gz

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

Page 24: モナモナ言うモナド入門.tar.gz

Monadは自己関手圏のモノイド

Page 25: モナモナ言うモナド入門.tar.gz

まとめ

• 同じ図で法則をまとめれるのはイイ

• 書きかけの検証用ソースhttps://gist.github.com/4104020