Upcoming SlideShare
×

# [FT-11][ltchen] A Tale of Two Monads

460 views

Published on

--by Liang-Ting Chen (ltchen)
--on Functional Thursday Meetup 11

Published in: Technology
2 Likes
Statistics
Notes
• Full Name
Comment goes here.

Are you sure you want to Yes No
• Be the first to comment

Views
Total views
460
On SlideShare
0
From Embeds
0
Number of Embeds
4
Actions
Shares
0
7
0
Likes
2
Embeds 0
No embeds

No notes for slide

### [FT-11][ltchen] A Tale of Two Monads

1. 1. A Tale of Two Monads: Category-theoretic and Computational viewpoints Liang-Ting Chen
2. 2. What is … a monad? Functional Programmer:
3. 3. What is … a monad? Functional Programmer: • a warm, fuzzy, little thing Monica Monad, by FalconNL
4. 4. What is … a monad? Functional Programmer: • a warm, fuzzy, little thing • return and bind with monad laws class Monad m where (>>=) ::m a->(a -> m b)->m b return::a ->m a ! -- monad laws return a >>= k = k a m >>= return = m m >>= (x-> k x >>= h) =  (m >>= k) >>= h
5. 5. What is … a monad? Functional Programmer: • a warm, fuzzy, little thing • return and bind with monad laws • a programmable semicolon • do { x' <- return x; f x’}   ≡ do { f x }  • do { x <- m; return x }  ≡ do { m }  • do { y <- do { x <- m; f x } g y }  ≡ do { x <- m; do { y <- f x; g y }}  ≡ do { x <- m; y <- f x; g y }
6. 6. What is … a monad? Functional Programmer: • a warm, fuzzy, little thing • return and bind with monad laws • a programmable semicolon • E. Moggi, “Notions of computation and monads”, 1991 T : Obj(C) ! Obj(C) ⌘A : A ! TA ( )⇤ : hom(A, TB) ! hom(TA, TB) ⌘⇤ A = idTA ⌘A; f⇤ = f f⇤ ; g⇤ = (f; g)⇤ Kleisli Triple monad laws ` M : ` [M]T : T (return) ` M : T⌧ x : ⌧ ` N : T ` letT (x ( M) in N : T (bind)
8. 8. “A monad in X is just a monoid in the category of endofunctors of X, what’s the problem?” –Philip Wadler
9. 9. –James Iry, A Brief, Incomplete and Mostly Wrong History of Programming Languages “A monad in X is just a monoid in the category of endofunctors of X, what’s the problem?”
10. 10. –Saunders Mac Lane, Categories for the Working Mathematician, p.138 “A monad in X is just a monoid in the category of endofunctors of X, with product × replaced by composition of endofunctors and unit set by the identity endofunctor.”
11. 11. What is … a monad? Mathematician: • a monoid in the category of endofunctors T3 Tµ // µT ✏✏ T2 µ ✏✏ T2 µ // T T T⌘ // id T2 µ ✏✏ T ⌘T oo id~~ T monad laws monad on a category T : C ! C ⌘: I ˙!T µ: T2 ˙!T
12. 12. What is … a monad? Mathematician: • a monoid in the category of endofunctors • a monoid in the endomorphism category K(a,a) of a bicategory K • 0-cell a; • 1-cell t: a ! a; • 2-cell ⌘: 1a ! t, and µ: tt ! t ttt tµ // µt ✏✏ tt µ ✏✏ tt µ // t t t⌘ // id tt µ ✏✏ t ⌘t oo id  t monad in a bicategory monad laws
13. 13. What is … a monad? Mathematician: • a monoid in the category of endofunctors • a monoid in the endomorphism category K(a,a) of a bicategory K • … from Su Horng’s slide
14. 14. Monads in Haskell, the Abstract Ones • class Functor m => Monad m where  unit :: a -> m a -- η   join :: m (m a) -> m a -- μ • --join . (fmap join) = join . join  --join . (fmap unit) = join . unit = id T3 Tµ // µT ✏✏ T2 µ ✏✏ T2 µ // T T T⌘ // id T2 µ ✏✏ T ⌘T oo id~~ T
15. 15. Kleisli Triples and Monads are Equivalent (Manes 1976) • fmap :: Monad m => (a -> b) -> m a -> m b  fmap f x = x >>= return . f    join :: Monad m => m (m a) -> m a  join x = x >>= id  -- id :: m a -> m a
16. 16. Kleisli Triples and Monads are Equivalent (Manes 1976) • fmap :: Monad m => (a -> b) -> m a -> m b  fmap f x = x >>= return . f    join :: Monad m => m (m a) -> m a  join x = x >>= id  -- id :: m a -> m a • (>>=) :: Monad m => m a -> (a -> m b) -> m b  x >>= f = join (fmap f x)  -- fmap f :: m a -> m (m b)
17. 17. –G. M. Kelly and A. J. Power, Adjunctions whose counits are coequalizers, and presentations of ﬁnitary enriched monads, 1993. Monads are derivable from algebraic operations and equations if and only if they have ﬁnite rank.
18. 18. An Algebraic Theory: Monoid • a set M with • a nullary operation ✏: 1 ! M • a binary operation •: M ⇥ M ! M satisfying • associativity: (a • b) • c = a • (b • c) • identity: a • ✏ = ✏ • a = a
19. 19. Monoids in Haskell: class Monoid a where mempty :: a -- ^ Identity of 'mappend' mappend :: a -> a -> a -- ^ An associative operation ! instance Monoid [a] where mempty = [] mappend = (++) ! instance Monoid b => Monoid (a -> b) where mempty _ = mempty mappend f g x = f x `mappend` g x
20. 20. An Algebraic Theory: Semi-lattice • a set L with • a binary operation _: M ⇥ M ! M satisfying • commutativity: a _ b = b _ a • associativity: a _ (b _ c) = (a _ b) _ c • idenpotency: a _ a = a
21. 21. Semi-lattices in Haskell class SemiLattice a where join :: a -> a -> a ! instance SemiLattice Bool where join = (||) ! instance SemiLattice v => SemiLattice (k -> v) where f `join` g = x -> f x `join` g x ! instance SemiLattice IntSet where join = union
22. 22. An Algebraic Theory (deﬁned as a type class in Haskell) • a set of operations 2 ⌃ and ar( ) 2 N • a set of equations with variables, e.g. 1( 1(x, y), z) = 1(x, 1(y, z))
23. 23. A Model of an Algebraic Theory (an instance) • a set M with • an n-ary function M for each operation with ar( ) = n satisfying each equation
24. 24. A Monad with Finite Rank MX = [ { Mi[MS] | i: S ✓f X } (Mi: MS ! MX)
25. 25. • maybe • exceptions • nondeterminism • side-effects but continuations is not algebraic Examples of Algebraic Effects X 7! X + E X 7! (X ⇥ State)State X 7! Pﬁn(X) X 7! R(RX ) X 7! X + 1
26. 26. Algebraic Theory of Exception A monadic program f :: A -> B + E corresponds to a homomorphism between free algebras • nullary operations raisee for each e 2 E • no equations
27. 27. Why Algebraic Effects? • Various ways of combination, e.g. sum, product, distribution, etc. • Equational reasoning of monadic programming is simpler. • A classiﬁcation of effects: a deeper insight.
28. 28. Conclusion • Moggi’s formulation solves fundamental problems, e.g. a uniﬁed approach to I/O. • Mathematicians bring new ideas to functional programming, e.g. algebraic effects, modular construction of effects • Still an ongoing area
29. 29. Conclusion • Moggi’s formulation solves fundamental problems, e.g. a uniﬁed approach to I/O. • Mathematicians bring new ideas to functional programming, e.g. algebraic effects, modular construction of effects • Still an ongoing area