This document discusses monads from both category-theoretic and computational viewpoints. From a category theory perspective, a monad is defined as a monoid in the category of endofunctors. From a computational perspective, monads are defined by return, bind, and monad laws. Monads can also be modeled as Kleisli triples or algebraic effects. Algebraic effects allow equational reasoning about monadic programs and a classification of effects based on whether they have finite rank. Mathematicians contribute new ideas to functional programming like algebraic effects and modular construction of effects.
3. What is … a monad?
Functional Programmer:
• a warm, fuzzy, little thing
Monica Monad, by FalconNL
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. 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. 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. “A monad in X is just a monoid in the category
of endofunctors of X, what’s the problem?”
–Philip Wadler
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. –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. 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. 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. 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. 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. 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. 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. –G. M. Kelly and A. J. Power, Adjunctions whose counits are
coequalizers, and presentations of finitary enriched monads, 1993.
Monads are derivable from algebraic
operations and equations if and only if they
have finite rank.
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. 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. 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. 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. An Algebraic Theory (defined 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. 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. A Monad with Finite Rank
MX =
[
{ Mi[MS] | i: S ✓f X }
(Mi: MS ! MX)
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! Pfin(X)
X 7! R(RX )
X 7! X + 1
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. Why Algebraic Effects?
• Various ways of combination, e.g. sum, product,
distribution, etc.
• Equational reasoning of monadic programming is simpler.
• A classification of effects: a deeper insight.
28. Conclusion
• Moggi’s formulation solves fundamental problems, e.g. a
unified approach to I/O.
• Mathematicians bring new ideas to functional
programming, e.g. algebraic effects, modular
construction of effects
• Still an ongoing area
29. Conclusion
• Moggi’s formulation solves fundamental problems, e.g. a
unified approach to I/O.
• Mathematicians bring new ideas to functional
programming, e.g. algebraic effects, modular
construction of effects
• Still an ongoing area