SlideShare une entreprise Scribd logo
1  sur  25
Télécharger pour lire hors ligne
モナモナ言う
  モナド入門.tar.gz
   2012-11-18 hiratara
100分で話して来た
超短縮版
話す内容

• 抽象化オタクの更なる高みを目指す
• 「モナドは自己関手の圏のモノイド」
 という雑学
大統一理論2
お題


Monoid則とMonad則は統一できるか?
そのとき
   Philip Wadler
の脳裏に閃光が走った!



      ※この話はフィクションです
モノイダル圏
双関手□と自然同型α、λ、ρがある圏


  A       B        A□B

      f        g      f□g

 A’       B’       A’□B’
(モノイダル圏の)         モノイド
                                   η□M   M□η
                                I□M   M□M M□I
                                       μ
                                  λ        ρ
          α           M□μ M□M
(M□M)□M       M□(M□M)                 M

    μ□M

                 μ
 M□M                      M
Monoid a(1)




                                                          prod (id, mappend’)
(a, a), a
            ((x, y), z) -> (x, (y, z))
                                          a, (a, a)                             (a, a)


     prod (mappend’, id)                                                   mappend’




                                            mappend’
 (a, a)                       prod (f, g) (x, y) = (f x, g y)                         a
                              mappend’ = uncurry mappend
Monoid a(1)

             (x <> y) <> z = x <> (y <> z)

                                                          prod (id, mappend’)
(a, a), a
            ((x, y), z) -> (x, (y, z))
                                          a, (a, a)                             (a, a)


     prod (mappend’, id)                                                   mappend’




                                            mappend’
 (a, a)                       prod (f, g) (x, y) = (f x, g y)                         a
                              mappend’ = uncurry mappend
Monoid a(2)



          prod (mempty’, id)                prod (id, mempty’)
((), a)                        (a, a)                            (a, ())

                                     mappend’

          snd                                          fst




                                 a
                      mempty’ = const mempty
Monoid a(2)
                    mempty <> x = x
                    x <> mempty = x
          prod (mempty’, id)                prod (id, mempty’)
((), a)                        (a, a)                            (a, ())

                                     mappend’

          snd                                          fst




                                 a
                      mempty’ = const mempty
Monoid a(2)
                    mempty <> x = x
                    x <> mempty = x
          prod (mempty’, id)                prod (id, mempty’)
((), a)                        (a, a)                            (a, ())

                                     mappend’

          snd                                          fst




                                 a
                   ”集合”
                      mempty’ = const mempty
Monoidは
    集合圏のモノイド
モナド則

• 以下と同値
  join . fmap join = join . join
  join . fmap return = join . return = id
• 証明は http://ja.wikibooks.org/wiki/Haskell/
  %E5%9C%8F%E8%AB%96 を参照
Monad m(1)




         id                fmap join
mmma            mmma                   mma


  join                                 join




                   join
mma                                       ma
Monad m(1)

         join . fmap join = join . join

            id                        fmap join
mmma               mmma                           mma


  join                                            join




                         join
mma                                                  ma
Monad m(2)



     return                fmap return
ma              mma                      ma


                    join
     id                            id




                 ma
Monad m(2)

          join . fmap return = id
             join . return = id
     return                   fmap return
ma                mma                       ma


                       join
     id                               id




                   ma
Monad m(2)

          join . fmap return = id
             join . return = id
     return                   fmap return
ma                mma                       ma


                       join
     id                               id




                   ma
     ”自己関手”
Monadは
自己関手圏のモノイド
まとめ

• 同じ図で法則をまとめれるのはイイ
• 書きかけの検証用ソース
 https://gist.github.com/4104020

Contenu connexe

En vedette

Stateモナドの解説 後編
Stateモナドの解説 後編Stateモナドの解説 後編
Stateモナドの解説 後編Masahiro Honma
 
Stateモナドの解説 前編
Stateモナドの解説 前編Stateモナドの解説 前編
Stateモナドの解説 前編Masahiro Honma
 
Types and perl language
Types and perl languageTypes and perl language
Types and perl languageMasahiro Honma
 
カレーとHokkaidopm
カレーとHokkaidopmカレーとHokkaidopm
カレーとHokkaidopmMasahiro Honma
 
ウヰスキーとPSGI
ウヰスキーとPSGIウヰスキーとPSGI
ウヰスキーとPSGIMasahiro Honma
 
Stateモナドの解説 中編
Stateモナドの解説 中編Stateモナドの解説 中編
Stateモナドの解説 中編Masahiro Honma
 
すべてが@__kanになる
すべてが@__kanになるすべてが@__kanになる
すべてが@__kanになるMasahiro Honma
 
Hachioji.pm in Machida の LT
Hachioji.pm in Machida の LTHachioji.pm in Machida の LT
Hachioji.pm in Machida の LTMasahiro Honma
 
循環参照のはなし
循環参照のはなし循環参照のはなし
循環参照のはなしMasahiro Honma
 
Monads in python
Monads in pythonMonads in python
Monads in pythoneldariof
 
モナモナ言うモナド入門
モナモナ言うモナド入門モナモナ言うモナド入門
モナモナ言うモナド入門Masahiro Honma
 
すごいMonad入門
すごいMonad入門すごいMonad入門
すごいMonad入門真一 北原
 

En vedette (20)

Stateモナドの解説 後編
Stateモナドの解説 後編Stateモナドの解説 後編
Stateモナドの解説 後編
 
Stateモナドの解説 前編
Stateモナドの解説 前編Stateモナドの解説 前編
Stateモナドの解説 前編
 
定理3
定理3定理3
定理3
 
Types and perl language
Types and perl languageTypes and perl language
Types and perl language
 
カレーとHokkaidopm
カレーとHokkaidopmカレーとHokkaidopm
カレーとHokkaidopm
 
ウヰスキーとPSGI
ウヰスキーとPSGIウヰスキーとPSGI
ウヰスキーとPSGI
 
Stateモナドの解説 中編
Stateモナドの解説 中編Stateモナドの解説 中編
Stateモナドの解説 中編
 
TraitとMoose::Role
TraitとMoose::RoleTraitとMoose::Role
TraitとMoose::Role
 
Monads in perl
Monads in perlMonads in perl
Monads in perl
 
Math::Category
Math::CategoryMath::Category
Math::Category
 
すべてが@__kanになる
すべてが@__kanになるすべてが@__kanになる
すべてが@__kanになる
 
Hachioji.pm in Machida の LT
Hachioji.pm in Machida の LTHachioji.pm in Machida の LT
Hachioji.pm in Machida の LT
 
Perl saved a lady.
Perl saved a lady.Perl saved a lady.
Perl saved a lady.
 
Arrows in perl
Arrows in perlArrows in perl
Arrows in perl
 
AnyEvent and Plack
AnyEvent and PlackAnyEvent and Plack
AnyEvent and Plack
 
循環参照のはなし
循環参照のはなし循環参照のはなし
循環参照のはなし
 
Levenshtein Automata
Levenshtein AutomataLevenshtein Automata
Levenshtein Automata
 
Monads in python
Monads in pythonMonads in python
Monads in python
 
モナモナ言うモナド入門
モナモナ言うモナド入門モナモナ言うモナド入門
モナモナ言うモナド入門
 
すごいMonad入門
すごいMonad入門すごいMonad入門
すごいMonad入門
 

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