狠狠撸

狠狠撸Share a Scribd company logo
モナモナ言う
  モナド入門.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
惭辞苍辞颈诲は
    集合圏のモノイド
モナド則

? 以下と同値
  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

More Related Content

モナモナ言うモナド入门.迟补谤.驳锄