comprehending monads
TRANSCRIPT
-
8/3/2019 Comprehending Monads
1/38
C o m p r e h e n d i n g M o n a d s
P h i l i p W a d l e r
U n i v e r s i t y o f G l a s g o w
A b s t r a c t
C a t e g o r y t h e o r i s t s i n v e n t e d m o n a d s i n t h e 1 9 6 0 ' s t o c o n c i s e l y e x p r e s s c e r t a i n
a s p e c t s o f u n i v e r s a l a l g e b r a . F u n c t i o n a l p r o g r a m m e r s i n v e n t e d l i s t c o m p r e h e n s i o n s
i n t h e 1 9 7 0 ' s t o c o n c i s e l y e x p r e s s c e r t a i n p r o g r a m s i n v o l v i n g l i s t s . T h i s p a p e r s h o w s
h o w l i s t c o m p r e h e n s i o n s m a y b e g e n e r a l i s e d t o a n a r b i t r a r y m o n a d , a n d h o w t h e
r e s u l t i n g p r o g r a m m i n g f e a t u r e c a n c o n c i s e l y e x p r e s s i n a p u r e f u n c t i o n a l l a n g u a g e
s o m e p r o g r a m s t h a t m a n i p u l a t e s t a t e , h a n d l e e x c e p t i o n s , p a r s e t e x t , o r i n v o k e c o n -
t i n u a t i o n s . A n e w s o l u t i o n t o t h e o l d p r o b l e m o f d e s t r u c t i v e a r r a y u p d a t e i s a l s o
p r e s e n t e d . N o k n o w l e d g e o f c a t e g o r y t h e o r y i s a s s u m e d .
1 I n t r o d u c t i o n
I s t h e r e a w a y t o c o m b i n e t h e i n d u l g e n c e s o f i m p u r i t y w i t h t h e b l e s s i n g s o f p u r i t y ?
I m p u r e , s t r i c t f u n c t i o n a l l a n g u a g e s s u c h a s S t a n d a r d M L M i l 8 4 , H M T 8 8 ] a n d S c h e m e
R C 8 6 ] s u p p o r t a w i d e v a r i e t y o f f e a t u r e s , s u c h a s a s s i g n i n g t o s t a t e , h a n d l i n g e x c e p t i o n s ,
a n d i n v o k i n g c o n t i n u a t i o n s . P u r e , l a z y f u n c t i o n a l l a n g u a g e s s u c h a s H a s k e l l H P W 9 1 ] o r
M i r a n d a
1
T u r 8 5 ] e s c h e w s u c h f e a t u r e s , b e c a u s e t h e y a r e i n c o m p a t i b l e w i t h t h e a d v a n -
t a g e s o f l a z y e v a l u a t i o n a n d e q u a t i o n a l r e a s o n i n g , a d v a n t a g e s t h a t h a v e b e e n d e s c r i b e d
a t l e n g t h e l s e w h e r e H u g 8 9 , B W 8 8 ] .
P u r i t y h a s i t s r e g r e t s , a n d a l l p r o g r a m m e r s i n p u r e f u n c t i o n a l l a n g u a g e s w i l l r e c a l l
s o m e m o m e n t w h e n a n i m p u r e f e a t u r e h a s t e m p t e d t h e m . F o r i n s t a n c e , i f a c o u n t e r i s
r e q u i r e d t o g e n e r a t e u n i q u e n a m e s , t h e n a n a s s i g n a b l e v a r i a b l e s e e m s j u s t t h e t i c k e t . I n
s u c h c a s e s i t i s a l w a y s p o s s i b l e t o m i m i c t h e r e q u i r e d i m p u r e f e a t u r e b y s t r a i g h t f o r w a r d
t h o u g h t e d i o u s m e a n s . F o r i n s t a n c e , a c o u n t e r c a n b e s i m u l a t e d b y m o d i f y i n g t h e r e l e v a n t
f u n c t i o n s t o a c c e p t a n a d d i t i o n a l p a r a m e t e r ( t h e c o u n t e r ' s c u r r e n t v a l u e ) a n d r e t u r n a n
a d d i t i o n a l r e s u l t ( t h e c o u n t e r ' s u p d a t e d v a l u e ) .
1
M i r a n d a i s a t r a d e m a r k o f R e s e a r c h S o f t w a r e L i m i t e d .
A u t h o r ' s a d d r e s s : D e p a r t m e n t o f C o m p u t i n g S c i e n c e , U n i v e r s i t y o f G l a s g o w , G 1 2 8 Q Q , S c o t l a n d . E l e c -
t r o n i c m a i l : w a d l e r @ c s . g l a s g o w . a c . u k .
T h i s p a p e r a p p e a r e d i n M a t h e m a t i c a l S t r u c t u r e s i n C o m p u t e r S c i e n c e v o l u m e 2 , p p . 4 6 1 { 4 9 3 , 1 9 9 2 ; c o p y -
r i g h t C a m b r i d g e U n i v e r s i t y P r e s s . T h i s v e r s i o n c o r r e c t s a f e w s m a l l e r r o r s i n t h e p u b l i s h e d v e r s i o n . A n
e a r l i e r v e r s i o n a p p e a r e d i n A C M C o n f e r e n c e o n L i s p a n d F u n c t i o n a l P r o g r a m m i n g , N i c e , J u n e 1 9 9 0 .
1
-
8/3/2019 Comprehending Monads
2/38
T h i s p a p e r d e s c r i b e s a n e w m e t h o d f o r s t r u c t u r i n g p u r e p r o g r a m s t h a t m i m i c i m p u r e
f e a t u r e s . T h i s m e t h o d d o e s n o t c o m p l e t e l y e l i m i n a t e t h e t e n s i o n b e t w e e n p u r i t y a n d
i m p u r i t y , b u t i t d o e s r e l a x i t a l i t t l e b i t . I t i n c r e a s e s t h e r e a d a b i l i t y o f t h e r e s u l t i n g
p r o g r a m s , a n d i t e l i m i n a t e s t h e p o s s i b i l i t y o f c e r t a i n s i l l y e r r o r s t h a t m i g h t o t h e r w i s e
a r i s e ( s u c h a s a c c i d e n t a l l y p a s s i n g t h e w r o n g v a l u e f o r t h e c o u n t e r p a r a m e t e r ) .
T h e i n s p i r a t i o n f o r t h i s t e c h n i q u e c o m e s f r o m t h e w o r k o f E u g e n i o M o g g i M o g 8 9 a ,
M o g 8 9 b ] . H i s g o a l w a s t o p r o v i d e a w a y o f s t r u c t u r i n g t h e s e m a n t i c d e s c r i p t i o n o f f e a t u r e s
s u c h a s s t a t e , e x c e p t i o n s , a n d c o n t i n u a t i o n s . H i s d i s c o v e r y w a s t h a t t h e n o t i o n o f a m o n a d
f r o m c a t e g o r y t h e o r y s u i t s t h i s p u r p o s e . B y d e n i n g a n i n t e r p r e t a t i o n o f - c a l c u l u s i n
a n a r b i t r a r y m o n a d h e p r o v i d e d a f r a m e w o r k t h a t c o u l d d e s c r i b e a l l t h e s e f e a t u r e s a n d
m o r e .
I t i s r e l a t i v e l y s t r a i g h t f o r w a r d t o a d o p t M o g g i ' s t e c h n i q u e o f s t r u c t u r i n g d e n o t a t i o n a l
s p e c i c a t i o n s i n t o a t e c h n i q u e f o r s t r u c t u r i n g f u n c t i o n a l p r o g r a m s . T h i s p a p e r p r e s e n t s a
s i m p l i e d v e r s i o n o f M o g g i ' s i d e a s , f r a m e d i n a w a y b e t t e r s u i t e d t o f u n c t i o n a l p r o g r a m -
m e r s t h a n s e m a n t i c i s t s ; i n p a r t i c u l a r , n o k n o w l e d g e o f c a t e g o r y t h e o r y i s a s s u m e d .
T h e p a p e r c o n t a i n s t w o s i g n i c a n t n e w c o n t r i b u t i o n s .
T h e r s t c o n t r i b u t i o n i s a n e w l a n g u a g e f e a t u r e , t h e m o n a d c o m p r e h e n s i o n . T h i s
g e n e r a l i s e s t h e f a m i l i a r n o t i o n o f l i s t c o m p r e h e n s i o n W a d 8 7 ] , d u e o r i g i n a l l y t o B u r s t a l l
a n d D a r l i n g t o n , a n d f o u n d i n K R C T u r 8 2 ] , M i r a n d a , H a s k e l l a n d o t h e r l a n g u a g e s . M o n a d
c o m p r e h e n s i o n s a r e n o t e s s e n t i a l t o t h e s t r u c t u r i n g t e c h n i q u e d e s c r i b e d h e r e , b u t t h e y d o
p r o v i d e a p l e a s a n t s y n t a x f o r e x p r e s s i n g p r o g r a m s s t r u c t u r e d i n t h i s w a y .
T h e s e c o n d c o n t r i b u t i o n i s a n e w s o l u t i o n t o t h e o l d p r o b l e m o f d e s t r u c t i v e a r r a y
u p d a t e . T h e s o l u t i o n c o n s i s t s o f t w o a b s t r a c t d a t a t y p e s w i t h t e n o p e r a t i o n s b e t w e e n
t h e m . U n d e r t h i s a p p r o a c h , t h e u s u a l t y p i n g d i s c i p l i n e ( e . g . , H i n d l e y - M i l n e r e x t e n d e d
w i t h a b s t r a c t d a t a t y p e s ) i s s u c i e n t t o g u a r a n t e e t h a t a r r a y u p d a t e m a y s a f e l y b e
i m p l e m e n t e d b y o v e r w r i t i n g . T o m y k n o w l e d g e , t h i s s o l u t i o n h a s n e v e r b e e n p r o p o s e d
b e f o r e , a n d i t s d i s c o v e r y c o m e s a s a s u r p r i s e c o n s i d e r i n g t h e p l e t h o r a o f m o r e e l a b o r a t e
s o l u t i o n s t h a t h a v e b e e n p r o p o s e d : t h e s e i n c l u d e s y n t a c t i c r e s t r i c t i o n s S c h 8 5 ] , r u n - t i m e
c h e c k s H o l 8 3 ] , a b s t r a c t i n t e r p r e t a t i o n H u d 8 6 a , H u d 8 6 b , B l o 8 9 ] , a n d e x o t i c t y p e s y s t e m s
G H 9 0 , W a d 9 0 , W a d 9 1 ] . T h a t m o n a d s l e d t o t h e d i s c o v e r y o f t h i s s o l u t i o n m u s t c o u n t a s
a p o i n t i n t h e i r f a v o u r .
W h y h a s t h i s s o l u t i o n n o t b e e n d i s c o v e r e d b e f o r e ? O n e l i k e l y r e a s o n i s t h a t t h e d a t a
t y p e s i n v o l v e h i g h e r - o r d e r f u n c t i o n s i n a n e s s e n t i a l w a y . T h e u s u a l a x i o m a t i s a t i o n o f
a r r a y s i n v o l v e s o n l y r s t - o r d e r f u n c t i o n s ( i n d e x , u p d a t e , a n d n e w a r r a y , a s d e s c r i b e d i n
S e c t i o n 4 . 3 ) , a n d s o , a p p a r e n t l y , i t d i d n o t o c c u r t o a n y o n e t o s e a r c h f o r a n a b s t r a c t d a t a
t y p e b a s e d o n h i g h e r - o r d e r f u n c t i o n s . I n c i d e n t a l l y , t h e h i g h e r - o r d e r n a t u r e o f t h e s o l u t i o n
m e a n s t h a t i t c a n n o t b e a p p l i e d i n r s t - o r d e r l a n g u a g e s s u c h a s P r o l o g o r O B J . I t a l s o
c a s t s d o u b t o n G o g u e n ' s t h e s i s t h a t r s t - o r d e r l a n g u a g e s a r e s u c i e n t f o r m o s t p u r p o s e s
G o g 8 8 ] .
M o n a d s a n d m o n a d c o m p r e h e n s i o n s h e l p t o c l a r i f y a n d u n i f y s o m e p r e v i o u s p r o p o s a l s
f o r i n c o r p o r a t i n g v a r i o u s f e a t u r e s i n t o f u n c t i o n a l l a n g u a g e s : e x c e p t i o n s W a d 8 5 , S p i 9 0 ] ,
p a r s e r s W a d 8 5 , F a i 8 7 , F L 8 9 ] , a n d n o n - d e t e r m i n i s m H O 8 9 ] . I n p a r t i c u l a r , S p i v e y ' s w o r k
S p i 9 0 ] i s n o t a b l e f o r p o i n t i n g o u t , i n d e p e n d e n t l y o f M o g g i , t h a t m o n a d s p r o v i d e a f r a m e -
2
-
8/3/2019 Comprehending Monads
3/38
w o r k f o r e x c e p t i o n h a n d l i n g .
T h e r e i s a t r a n s l a t i o n s c h e m e f r o m - c a l c u l u s i n t o a n a r b i t r a r y m o n a d . I n d e e d , t h e r e
a r e t w o s c h e m e s , o n e y i e l d i n g c a l l - b y - v a l u e s e m a n t i c s a n d o n e y i e l d i n g c a l l - b y - n a m e .
T h e s e c a n b e u s e d t o s y s t e m a t i c a l l y t r a n s f o r m l a n g u a g e s w i t h s t a t e , e x c e p t i o n s , c o n t i n u -
a t i o n s , o r o t h e r f e a t u r e s i n t o a p u r e f u n c t i o n a l l a n g u a g e . T w o a p p l i c a t i o n s a r e g i v e n . O n e
i s t o d e r i v e c a l l - b y - v a l u e a n d c a l l - b y - n a m e i n t e r p r e t a t i o n s f o r a s i m p l e n o n - d e t e r m i n i s t i c
l a n g u a g e : t h i s t s t h e w o r k o f H u g h e s a n d O ' D o n n e l l H O 8 9 ] i n t o t h e m o r e g e n e r a l f r a m e -
w o r k g i v e n h e r e . T h e o t h e r i s t o a p p l y t h e c a l l - b y - v a l u e s c h e m e i n t h e m o n a d o f c o n t i n u -
a t i o n s : t h e r e s u l t i s t h e f a m i l i a r c o n t i n u a t i o n - p a s s i n g s t y l e t r a n s f o r m a t i o n . I t r e m a i n s a n
o p e n q u e s t i o n w h e t h e r t h e r e i s a t r a n s l a t i o n s c h e m e t h a t c o r r e s p o n d s t o c a l l - b y - n e e d a s
o p p o s e d t o c a l l - b y - n a m e .
A k e y f e a t u r e o f t h e m o n a d a p p r o a c h i s t h e u s e o f t y p e s t o i n d i c a t e w h a t p a r t s o f
a p r o g r a m m a y h a v e w h a t s o r t s o f e e c t s . I n t h i s , i t i s s i m i l a r i n s p i r i t t o G i o r d a n d
L u c a s s e n ' s e e c t s y s t e m s G L 8 8 ] .
T h e e x a m p l e s i n t h i s p a p e r a r e b a s e d o n H a s k e l l H P W 9 1 ] , t h o u g h a n y l a z y f u n c t i o n a l
l a n g u a g e i n c o r p o r a t i n g t h e H i n d l e y / M i l n e r t y p e s y s t e m w o u l d w o r k a s w e l l .
T h e r e m a i n d e r o f t h i s p a p e r i s o r g a n i s e d a s f o l l o w s . S e c t i o n 2 u s e s l i s t c o m p r e h e n s i o n s
t o m o t i v a t e t h e c o n c e p t o f a m o n a d , a n d i n t r o d u c e s m o n a d c o m p r e h e n s i o n s . S e c t i o n 3
s h o w s t h a t v a r i a b l e b i n d i n g ( a s i n \ l e t " t e r m s ) a n d c o n t r o l o f e v a l u a t i o n o r d e r c a n b e
m o d e l l e d b y t w o t r i v i a l m o n a d s . S e c t i o n 4 e x p l o r e s t h e u s e o f m o n a d s t o s t r u c t u r e p r o -
g r a m s t h a t m a n i p u l a t e s t a t e , a n d p r e s e n t s t h e n e w s o l u t i o n t o t h e a r r a y u p d a t e p r o b l e m .
T w o e x a m p l e s a r e c o n s i d e r e d : r e n a m i n g b o u n d v a r i a b l e s , a n d i n t e r p r e t i n g a s i m p l e i m -
p e r a t i v e l a n g u a g e . S e c t i o n 5 e x t e n d s m o n a d c o m p r e h e n s i o n s t o i n c l u d e l t e r s . S e c t i o n 6
i n t r o d u c e s t h e c o n c e p t o f m o n a d m o r p h i s m a n d g i v e s a s i m p l e p r o o f o f t h e e q u i v a l e n c e o f
t w o p r o g r a m s . S e c t i o n 7 c a t a l o g u e s t h r e e m o r e m o n a d s : p a r s e r s , e x c e p t i o n s , a n d c o n t i n u -
a t i o n s . S e c t i o n 8 g i v e s t h e t r a n s l a t i o n s c h e m e s f o r i n t e r p r e t i n g - c a l c u l u s i n a n a r b i t r a r y
m o n a d . T w o e x a m p l e s a r e c o n s i d e r e d : g i v i n g a s e m a n t i c s t o a n o n - d e t e r m i n i s t i c l a n g u a g e ,
a n d d e r i v i n g c o n t i n u a t i o n - p a s s i n g s t y l e .
2 C o m p r e h e n s i o n s a n d m o n a d s
2 . 1 L i s t s
L e t u s w r i t e M x f o r t h e d a t a t y p e o f l i s t s w i t h e l e m e n t s o f t y p e x . ( I n H a s k e l l , t h i s i s
u s u a l l y w r i t t e n x ] . ) F o r e x a m p l e , 1 ; 2 ; 3 : : M I n t a n d ` a ' ; ` b ' ; ` c ' ] : : M C h a r . W e w r i t e
m a p f o r t h e h i g h e r - o r d e r f u n c t i o n t h a t a p p l i e s a f u n c t i o n t o e a c h e l m e n t o f a l i s t :
m a p : : ( x ! y ) ! ( M x ! M y )
( I n H a s k e l l , t y p e v a r i a b l e s a r e w r i t t e n w i t h s m a l l l e t t e r s , e . g . , x a n d y , a n d t y p e c o n s t r u c -
t o r s a r e w r i t t e n w i t h c a p i t a l l e t t e r s , e . g . , M . ) F o r e x a m p l e , i f c o d e : : C h a r ! I n t m a p s a
c h a r a c t e r t o i t s A S C I I c o d e , t h e n m a p c o d e ` a ' ; ` b ' ; ` c ' ] = 9 7 ; 9 8 ; 9 9 ] . O b s e r v e t h a t
( i ) m a p i d = i d ;
( i i ) m a p ( g f ) = m a p g m a p f
3
-
8/3/2019 Comprehending Monads
4/38
H e r e i d i s t h e i d e n t i t y f u n c t i o n , i d x = x , a n d g f i s f u n c t i o n c o m p o s i t i o n , ( g f ) x =
g ( f x )
I n c a t e g o r y t h e o r y , t h e n o t i o n s o f t y p e a n d f u n c t i o n a r e g e n e r a l i s e d t o o b j e c t a n d
a r r o w . A n o p e r a t o r M t a k i n g e a c h o b j e c t x i n t o a n o b j e c t M x , c o m b i n e d w i t h a n
o p e r a t o r m a p t a k i n g e a c h a r r o w f : : x ! y i n t o a n a r r o w m a p f : : M x ! M y , a n d
s a t i s f y i n g ( i ) a n d ( i i ) , i s c a l l e d a f u n c t o r . C a t e g o r i s t s p r e f e r t o u s e t h e s a m e s y m b o l f o r
b o t h o p e r a t o r s , a n d s o w o u l d w r i t e M f w h e r e w e w r i t e m a p f
T h e f u n c t i o n u n i t c o n v e r t s a v a l u e i n t o a s i n g l e t o n l i s t s , a n d t h e f u n c t i o n j o i n c o n -
c a t e n a t e s a l i s t o f l i s t s i n t o a l i s t :
u n i t : : x ! M x ;
j o i n : : M ( M x ) ! M x
F o r e x a m p l e , u n i t 3 = 3 ] a n d j o i n 1 ; 2 ; 3 ] ] = 1 ; 2 ; 3 ] . O b s e r v e t h a t
( i i i ) m a p f u n i t = u n i t f ;
( i v ) m a p f j o i n = j o i n m a p ( m a p f )
L a w s ( i i i ) a n d ( i v ) m a y b e d e r i v e d b y a s y s t e m a t i c t r a n s f o r m a t i o n o f t h e p o l y m o r p h i c
t y p e s o f u n i t a n d j o i n . T h e i d e a o f d e r i v i n g l a w s f r o m t y p e s g o e s b y t h e s l o g a n \ t h e o r e m s
f o r f r e e " W a d 8 9 ] a n d i s a c o n s e q u e n c e o f R e y n o l d s ' a b s t r a c t i o n t h e o r e m f o r p o l y m o r p h i c
l a m b d a c a l c u l u s R e y 8 3 ] .
I n c a t e g o r i c a l t e r m s , u n i t a n d j o i n a r e n a t u r a l t r a n s f o r m a t i o n s . R a t h e r t h a n t r e a t u n i t
a s a s i n g l e f u n c t i o n w i t h a p o l y m o r p h i c t y p e , c a t e g o r i s t s t r e a t i t a s a f a m i l y o f a r r o w s ,
u n i t
x
: : x ! M x , o n e f o r e a c h o b j e c t x , s a t i s f y i n g m a p f u n i t
x
= u n i t
y
f f o r a n y o b j e c t s
x a n d y a n d a n y a r r o w f : : x ! y b e t w e e n t h e m . T h e y t r e a t j o i n s i m i l a r l y . N a t u r a l
t r a n s f o r m a t i o n i s a s i m p l e r c o n c e p t t h a n p o l y m o r p h i c f u n c t i o n , b u t w e w i l l s t i c k w i t h
p o l y m o r p h i s m s i n c e i t ' s a m o r e f a m i l i a r c o n c e p t t o f u n c t i o n a l p r o g r a m m e r s .
2 . 2 C o m p r e h e n s i o n s
M a n y f u n c t i o n a l l a n g u a g e s p r o v i d e a f o r m o f l i s t c o m p r e h e n s i o n a n a l o g o u s t o s e t c o m p r e -
h e n s i o n . F o r e x a m p l e ,
( x ; y ) x 1 ; 2 ; y 3 ; 4 ] ] = ( 1 ; 3 ) ; ( 1 ; 4 ) ; ( 2 ; 3 ) ; ( 2 ; 4 )
I n g e n e r a l , a c o m p r e h e n s i o n h a s t h e f o r m t q ] , w h e r e t i s a t e r m a n d q i s a q u a l i e r . W e
u s e t h e l e t t e r s t , u , v t o r a n g e o v e r t e r m s , a n d p , q , r t o r a n g e o v e r q u a l i e r s . A q u a l i e r
i s e i t h e r e m p t y , ; o r a g e n e r a t o r , x u , w h e r e x i s a v a r i a b l e a n d u i s a l i s t - v a l u e d
t e r m ; o r a c o m p o s i t i o n o f q u a l i e r s , ( p ; q ) . C o m p r e h e n s i o n s a r e d e n e d b y t h e f o l l o w i n g
r u l e s :
( 1 ) t = u n i t t ;
( 2 ) t x u = m a p ( x ! t ) u ;
( 3 ) t ( p ; q ) = j o i n t q p
4
-
8/3/2019 Comprehending Monads
5/38
( I n H a s k e l l , - t e r m s a r e w r i t t e n ( x ! t ) r a t h e r t h a n t h e m o r e c o m m o n ( x t ) . ) N o t e
t h e r e v e r s a l o f q u a l i e r s i n r u l e ( 3 ) : n e s t i n g q i n s i d e p o n t h e r i g h t - h a n d s i d e m e a n s t h a t ,
a s w e e x p e c t , v a r i a b l e s b o u n d i n p m a y b e u s e d i n q b u t n o t v i c e - v e r s a .
F o r t h o s e f a m i l i a r w i t h l i s t c o m p r e h e n s i o n s , t h e e m p t y q u a l i e r a n d t h e p a r e n t h e s e s
i n q u a l i e r c o m p o s i t i o n s w i l l a p p e a r s t r a n g e . T h i s i s b e c a u s e t h e y a r e n o t n e e d e d . W e
w i l l s h o r t l y p r o v e t h a t q u a l i e r c o m p o s i t i o n i s a s s o c i a t i v e a n d h a s t h e e m p t y q u a l i e r
a s u n i t . T h u s w e n e e d n o t w r i t e p a r e n t h e s e s i n q u a l i e r c o m p o s i t i o n s , s i n c e ( ( p ; q ) ; r )
a n d ( p ; ( q ; r ) ) a r e e q u i v a l e n t , a n d w e n e e d n o t w r i t e ( q ; ) o r ( ; q ) b e c a u s e b o t h a r e
e q u i v a l e n t t o t h e s i m p l e r q . T h e o n l y r e m a i n i n g u s e o f i s t o w r i t e t ] , w h i c h w e
a b b r e v i a t e t
M o s t l a n g u a g e s t h a t i n c l u d e l i s t c o m p r e h e n s i o n s a l s o a l l o w a n o t h e r f o r m o f q u a l i e r ,
k n o w n a s a l t e r , t h e t r e a t m e n t o f w h i c h i s p o s t p o n e d u n t i l S e c t i o n 5 .
A s a s i m p l e e x a m p l e , w e h a v e :
s q r x x 1 ; 2 ; 3
= f b y ( 2 ) g
m a p ( x ! s q r x ) 1 ; 2 ; 3
= f r e d u c i n g m a p g
1 ; 4 ; 9
T h e c o m p r e h e n s i o n i n t h e i n i t i a l e x a m p l e i s c o m p u t e d a s :
( x ; y ) x 1 ; 2 ; y 3 ; 4
= f b y ( 3 ) g
j o i n ( x ; y ) y 3 ; 4 x 1 ; 2
= f b y ( 2 ) g
j o i n m a p ( y ! ( x ; y ) ) 3 ; 4 x 1 ; 2
= f b y ( 2 ) g
j o i n ( m a p ( x ! m a p ( y ! ( x ; y ) ) 3 ; 4 ) 1 ; 2 )
= f r e d u c i n g m a p g
j o i n ( m a p ( x ! ( x ; 3 ) ; ( x ; 4 ) ] ) 1 ; 2 )
= f r e d u c i n g m a p g
j o i n ( 1 ; 3 ) ; ( 1 ; 4 ) ; ( 2 ; 3 ) ; ( 2 ; 4 )
= f r e d u c i n g j o i n g
( 1 ; 3 ) ; ( 1 ; 4 ) ; ( 2 ; 3 ) ; ( 2 ; 4 )
F r o m ( i ) { ( i v ) a n d ( 1 ) { ( 3 ) w e m a y d e r i v e f u r t h e r l a w s :
( 4 ) f t q = m a p f t q ;
( 5 ) x x u = u ;
( 6 ) t p ; x u q ; r = t
u
x
p ; q ; r
u
x
I n ( 4 ) f u n c t i o n f m u s t c o n t a i n n o f r e e o c c u r r e n c e s o f v a r i a b l e s b o u n d b y q u a l i e r q , a n d
i n ( 6 ) t h e t e r m t
u
x
s t a n d s f o r t e r m t w i t h t e r m u s u b s t i t u t e d f o r e a c h f r e e o c c u r r e n c e o f
v a r i a b l e x , a n d s i m i l a r l y f o r t h e q u a l i e r r
u
x
. L a w ( 4 ) i s p r o v e d b y i n d u c t i o n o v e r t h e
5
-
8/3/2019 Comprehending Monads
6/38
s t r u c t u r e o f q u a l i e r s ; t h e p r o o f u s e s l a w s ( i i ) { ( i v ) a n d ( 1 ) { ( 3 ) . L a w ( 5 ) i s a n i m m e d i a t e
c o n s e q u e n c e o f l a w s ( i ) a n d ( 2 ) . L a w ( 6 ) i s a g a i n p r o v e d b y i n d u c t i o n o v e r t h e s t r u c t u r e
o f q u a l i e r s , a n d t h e p r o o f u s e s l a w s ( 1 ) { ( 4 )
A s p r o m i s e d , w e n o w s h o w t h a t q u a l i e r c o m p o s i t i o n i s a s s o c i a t i v e a n d h a s t h e e m p t y
q u a l i e r a s a u n i t :
( I
0
) t ; q = t q ;
( I I
0
) t q ; = t q ;
( I I I
0
) t ( p ; q ) ; r = t p ; ( q ; r )
F i r s t , o b s e r v e t h a t ( I
0
) { ( I I I
0
) a r e e q u i v a l e n t , r e s p e c t i v e l y , t o t h e f o l l o w i n g :
( I ) j o i n u n i t = i d ;
( I I ) j o i n m a p u n i t = i d ;
( I I I ) j o i n j o i n = j o i n m a p j o i n
T o s e e t h a t ( I I
0
) a n d ( I I ) a r e e q u i v a l e n t , s t a r t w i t h t h e l e f t s i d e o f ( I I
0
) a n d s i m p l i f y :
t q ;
= f b y ( 3 ) g
j o i n t q
= f b y ( 1 ) g
j o i n u n i t t q
= f b y ( 4 ) g
j o i n ( m a p u n i t t q )
T h a t ( I I ) i m p l i e s ( I I
0
) i s i m m e d i a t e . F o r t h e c o n v e r s e , t a k e t q ] t o b e x x u ] a n d
a p p l y ( 5 ) . T h e o t h e r t w o e q u i v a l e n c e s a r e s e e n s i m i l a r l y .
S e c o n d , o b s e r v e t h a t l a w s ( I ) { ( I I I ) d o i n d e e d h o l d . F o r e x a m p l e :
j o i n ( u n i t 1 ; 2 ) = j o i n 1 ; 2 ] ] = 1 ; 2 ;
j o i n ( m a p u n i t 1 ; 2 ) = j o i n 1 ; 2 ] ] = 1 ; 2 ;
j o i n ( j o i n 1 ; 2 ; 3 ] ] ] ) = j o i n 1 ; 2 ; 3 ] ] = 1 ; 2 ; 3 ;
j o i n ( m a p j o i n 1 ; 2 ; 3 ] ] ] ) = j o i n 1 ; 2 ; 3 ] ] = 1 ; 2 ; 3
U s e i n d u c t i o n o v e r l i s t s t o p r o v e ( I ) a n d ( I I ) , a n d o v e r l i s t o f l i s t s t o p r o v e ( I I I )
2 . 3 M o n a d s
T h e c o m p r e h e n s i o n n o t a t i o n s u i t s d a t a s t r u c t u r e s o t h e r t h a n l i s t s . S e t s a n d b a g s a r e
o b v i o u s e x a m p l e s , a n d w e s h a l l e n c o u n t e r m a n y o t h e r s . I n s p e c t i o n o f t h e f o r e g o i n g l e t s
u s i s o l a t e t h e c o n d i t i o n s u n d e r w h i c h a c o m p r e h e n s i o n n o t a t i o n i s s e n s i b l e .
F o r o u r p u r p o s e s , a m o n a d i s a n o p e r a t o r M o n t y p e s t o g e t h e r w i t h a t r i p l e o f f u n c t i o n s
m a p : : ( x ! y ) ! ( M x ! M y ) ;
u n i t : : x ! M x ;
j o i n : : M ( M x ) ! M x ;
6
-
8/3/2019 Comprehending Monads
7/38
s a t i s f y i n g l a w s ( i ) { ( i v ) a n d ( I ) { ( I I I )
E v e r y m o n a d g i v e s r i s e t o a n o t i o n o f c o m p r e h e n s i o n v i a l a w s ( 1 ) { ( 3 ) . T h e t h r e e
l a w s e s t a b l i s h a c o r r e s p o n d e n c e b e t w e e n t h e t h r e e c o m p o n e n t s o f a m o n a d a n d t h e t h r e e
f o r m s o f q u a l i e r : ( 1 ) a s s o c i a t e s u n i t w i t h t h e e m p t y q u a l i e r , ( 2 ) a s s o c i a t e s m a p w i t h
g e n e r a t o r s , a n d ( 3 ) a s s o c i a t e s j o i n w i t h q u a l i e r c o m p o s i t i o n . T h e r e s u l t i n g n o t i o n o f
c o m p r e h e n s i o n i s g u a r a n t e e d t o b e s e n s i b l e i n t h a t i t n e c e s s a r i l y s a t i s e s l a w s ( 4 ) { ( 6 )
a n d ( I
0
) { ( I I I
0
)
I n w h a t f o l l o w s , w e w i l l n e e d t o d i s t i n g u i s h m a n y m o n a d s . W e w r i t e M a l o n e t o s t a n d
f o r t h e m o n a d , l e a v i n g t h e t r i p l e ( m a p
M
; u n i t
M
; j o i n
M
) i m p l i c i t , a n d w e w r i t e t q
M
t o i n d i c a t e i n w h i c h m o n a d a c o m p r e h e n s i o n i s t o b e i n t e r p r e t e d . T h e m o n a d o f l i s t s a s
d e s c r i b e d a b o v e w i l l b e w r i t t e n L i s t
A s a n e x a m p l e , t a k e S e t t o b e t h e s e t t y p e c o n s t r u c t o r , m a p
S e t
t o b e t h e i m a g e o f a
s e t u n d e r a f u n c t i o n , u n i t
S e t
t o b e t h e f u n c t i o n t h a t t a k e s a n e l e m e n t i n t o a s i n g l e t o n s e t ,
a n d j o i n
S e t
t o b e t h e u n i o n o f a s e t o f s e t s :
m a p
S e t
f x = f f x x 2 x g
u n i t
S e t
x = f x g
j o i n
S e t
x =
S
x
T h e r e s u l t i n g c o m p r e h e n s i o n n o t a t i o n i s t h e f a m i l i a r o n e f o r s e t s . F o r i n s t a n c e , ( x ; y )
x x ; y y
S e t
s p e c i e s t h e c a r t e s i a n p r o d u c t o f s e t s x a n d y
W e c a n r e c o v e r u n i t , m a p , a n d j o i n f r o m t h e c o m p r e h e n s i o n n o t a t i o n :
( 1
0
) u n i t x = x
( 2
0
) m a p f x = f x x x
( 3
0
) j o i n x = x x x ; x x
H e r e w e a d o p t t h e c o n v e n t i o n t h a t i f x h a s t y p e x , t h e n x h a s t y p e M x a n d x h a s t y p e
M ( M x )
T h u s n o t o n l y c a n w e d e r i v e c o m p r e h e n s i o n s f r o m m o n a d s , b u t w e c a n a l s o d e r i v e
m o n a d s f r o m c o m p r e h e n s i o n s . D e n e a c o m p r e h e n s i o n s t r u c t u r e t o b e a n y i n t e r p r e t a t i o n
o f t h e s y n t a x o f c o m p r e h e n s i o n s t h a t s a t i s e s l a w s ( 5 ) { ( 6 ) a n d ( I
0
) { ( I I I
0
) . A n y m o n a d
g i v e s r i s e t o a c o m p r e h e n s i o n s t r u c t u r e , v i a l a w s ( 1 ) { ( 3 ) ; a s w e h a v e s e e n , t h e s e i m p l y
( 4 ) { ( 6 ) a n d ( I
0
) { ( I I I
0
) . C o n v e r s e l y , a n y c o m p r e h e n s i o n s t r u c t u r e g i v e s r i s e t o a m o n a d
s t r u c t u r e , v i a l a w s ( 1
0
) { ( 3
0
) ; i t i s e a s y t o v e r i f y t h a t t h e s e i m p l y ( i ) { ( i v ) a n d ( 1 ) { ( 4 ) ,
a n d h e n c e ( I ) { ( I I I )
T h e c o n c e p t w e a r r i v e d a t b y g e n e r a l i s i n g l i s t c o m p r e h e n s i o n s , m a t h e m a t i c i a n s a r r i v e d
a t b y a r a t h e r d i e r e n t r o u t e . I t r s t a r o s e i n h o m o l o g i c a l a l g e b r a i n t h e 1 9 5 0 ' s w i t h
t h e u n d i s t i n g u i s h e d n a m e \ s t a n d a r d c o n s t r u c t i o n " ( s o r t o f a m a t h e m a t i c a l e q u i v a l e n t o f
\ h e y y o u " ) . T h e n e x t n a m e , \ t r i p l e " , w a s n o t m u c h o f a n i m p r o v e m e n t . F i n a l l y i t w a s
b a p t i s e d a \ m o n a d " . N o w a d a y s i t c a n b e f o u n d i n a n y s t a n d a r d t e x t o n c a t e g o r y t h e o r y
M a c 7 1 , B W 8 5 , L S 8 6 ] .
T h e c o n c e p t w e c a l l a m o n a d i s s l i g h t l y s t r o n g e r t h a n w h a t a c a t e g o r i s t m e a n s b y t h a t
n a m e : w e a r e u s i n g w h a t a c a t e g o r i s t w o u l d c a l l a s t r o n g m o n a d i n a c a r t e s i a n c l o s e d
7
-
8/3/2019 Comprehending Monads
8/38
c a t e g o r y . R o u g l y s p e a k i n g , a c a t e g o r y i s c a r t e s i a n c l o s e d i f i t h a s e n o u g h s t r u c t u r e t o
i n t e r p r e t - c a l c u l u s . I n p a r t i c u l a r , a s s o c i a t e d w i t h a n y p a i r o f o b j e c t s ( t y p e s ) x a n d y
t h e r e i s a n o b j e c t x ! y ] r e p r e s e n t i n g t h e s p a c e o f a l l a r r o w s ( f u n c t i o n s ) f r o m x t o y
R e c a l l t h a t M i s a f u n c t o r i f f o r a n y a r r o w f : : x ! y t h e r e i s a n a r r o w m a p f : : M x !
M y s a t i s f y i n g ( i ) a n d ( i i ) . T h i s f u n c t o r i s s t r o n g i f i t i s i t s e l f r e p r e s e n t e d b y a s i n g l e
a r r o w m a p : : x ! y ! M x ! M y ] . T h i s i s a l l s e c o n d n a t u r e t o a g e n e r o u s f u n c t i o n a l
p r o g r a m m e r , b u t a s t i n g y c a t e g o r i s t p r o v i d e s s u c h s t r u c t u r e o n l y w h e n i t i s n e e d e d .
I t i s n e e d e d h e r e , a s e v i d e n c e d b y M o g g i ' s r e q u i r e m e n t t h a t a c o m p u t a t i o n a l m o n a d
h a v e a s t r e n g t h , a f u n c t i o n t : : ( x ; M y ) ! M ( x ; y ) s a t i s f y i n g c e r t a i n l a w s M o g 8 9 a ] . I n
a c a r t e s i a n c l o s e d c a t e g o r y , a m o n a d w i t h a s t r e n g t h i s e q u i v a l e n t t o a m o n a d w i t h a
s t r o n g f u n c t o r a s d e s c r i b e d a b o v e . I n o u r f r a m e w o r k , t h e s t r e n g t h i s d e n e d b y t ( x ; y ) =
( x ; y ) y y ] . ( F o l l o w i n g H a s k e l l , w e w r i t e ( x ; y ) f o r p a i r s a n d a l s o ( x ; y ) f o r t h e
c o r r e s p o n d i n g p r o d u c t t y p e . )
M o n a d s w e r e c o n c e i v e d i n t h e 1 9 5 0 ' s , l i s t c o m p r e h e n s i o n s i n t h e 1 9 7 0 ' s . T h e y h a v e
q u i t e i n d e p e n d e n t o r i g i n s , b u t t w i t h e a c h o t h e r r e m a r k a b l y w e l l . A s o f t e n h a p p e n s , a
c o m m o n t r u t h m a y u n d e r l i e a p p a r e n t l y d i s p a r a t e p h e n o m e n a , a n d i t m a y t a k e a d e c a d e
o r m o r e b e f o r e t h i s u n d e r l y i n g c o m m o n a l i t y i s u n e a r t h e d .
3 T w o t r i v i a l m o n a d s
3 . 1 T h e i d e n t i t y m o n a d
T h e i d e n t i t y m o n a d i s t h e t r i v i a l m o n a d s p e c i e d b y
t y p e I d x = x
m a p
I d
f x = f x
u n i t
I d
x = x
j o i n
I d
x = x ;
s o m a p
I d
, u n i t
I d
, a n d b i n d
i d
a r e a l l j u s t t h e i d e n t i t y f u n c t i o n . A c o m p r e h e n s i o n i n t h e
i d e n t i t y m o n a d i s l i k e a \ l e t " t e r m :
t x u
I d
= ( ( x ! t ) u )
= ( l e t x = u i n t )
S i m i l a r l y , a s e q u e n c e o f q u a l i e r s c o r r e s p o n d s t o a s e q u e n c e o f n e s t e d \ l e t " t e r m s :
t x u ; y v
I d
= ( l e t x = u i n ( l e t y = v i n t ) )
S i n c e y i s b o u n d a f t e r x i t a p p e a r s i n t h e i n n e r \ l e t " t e r m . I n t h e f o l l o w i n g , c o m p r e h e n -
s i o n s i n t h e i d e n t i t y m o n a d w i l l b e w r i t t e n i n p r e f e r e n c e t o \ l e t " t e r m s , a s t h e t w o a r e
e q u i v a l e n t .
I n t h e H i n d l e y - M i l n e r t y p e s y s t e m , - t e r m s a n d \ l e t " t e r m s d i e r i n t h a t t h e l a t t e r
m a y i n t r o d u c e p o l y m o r p h i s m . T h e k e y f a c t o r a l l o w i n g \ l e t " t e r m s t o p l a y t h i s r o l e i s t h a t
8
-
8/3/2019 Comprehending Monads
9/38
t h e s y n t a x p a i r s e a c h b o u n d v a r i a b l e w i t h i t s b i n d i n g t e r m . S i n c e m o n a d c o m p r e h e n s i o n s
h a v e a s i m i l a r p r o p e r t y , i t s e e m s r e a s o n a b l e t h a t t h e y , t o o , c o u l d b e u s e d t o i n t r o d u c e
p o l y m o r p h i s m . H o w e v e r , t h e f o l l o w i n g d o e s n o t r e q u i r e c o m p r e h e n s i o n s t h a t i n t r o d u c e
p o l y m o r p h i s m , s o w e l e a v e e x p l o r a t i o n o f t h i s i s s u e f o r t h e f u t u r e .
3 . 2 T h e s t r i c t n e s s m o n a d
S o m e t i m e s i t i s n e c e s s a r y t o c o n t r o l o r d e r o f e v a l u a t i o n i n a l a z y f u n c t i o n a l p r o g r a m . T h i s
i s u s u a l l y a c h i e v e d w i t h t h e c o m p u t a b l e f u n c t i o n s t r i c t , d e n e d b y
s t r i c t f x = i f x 6= t h e n f x e l s e
O p e r a t i o n a l l y , s t r i c t f x i s r e d u c e d b y r s t r e d u c i n g x t o w e a k h e a d n o r m a l f o r m ( W H N F )
a n d t h e n r e d u c i n g t h e a p p l i c a t i o n f x . A l t e r n a t i v e l y , i t i s s a f e t o r e d u c e x a n d f x i n
p a r a l l e l , b u t n o t a l l o w a c c e s s t o t h e r e s u l t u n t i l x i s i n W H N F .
W e c a n u s e t h i s f u n c t i o n a s t h e b a s i s o f a m o n a d :
t y p e S t r x = x
m a p
S t r
f x = s t r i c t f x
u n i t
S t r
x = x
j o i n
S t r
x = x
T h i s i s t h e s a m e a s t h e i d e n t i t y m o n a d , e x c e p t f o r t h e d e n i t i o n o f m a p
S t r
. M o n a d l a w s
( i ) , ( i i i ) { ( i v ) , a n d ( I ) { ( I I I ) a r e s a t i s e d , b u t l a w ( i i ) b e c o m e s a n i n e q u a l i t y ,
m a p
S t r
g m a p
S t r
f v m a p
S t r
( g f )
S o S t r i s n o t q u i t e a m o n a d ; c a t e g o r i s t s m i g h t c a l l i t a l a x m o n a d . C o m p r e h e n s i o n s f o r
l a x m o n a d s a r e d e n e d b y l a w s ( 1 ) { ( 3 ) , j u s t a s f o r m o n a d s . L a w ( 5 ) r e m a i n s v a l i d , b u t
l a w s ( 4 ) a n d ( 6 ) b e c o m e i n e q u a l i t i e s .
W e w i l l u s e S t r - c o m p r e h e n s i o n s t o c o n t r o l t h e e v a l u a t i o n o r d e r o f l a z y p r o g r a m s . F o r
i n s t a n c e , t h e o p e r a t i o n a l i n t e r p r e t a t i o n o f
t x u ; y v
S t r
i s a s f o l l o w s : r e d u c e u t o W H N F , b i n d x t o t h e v a l u e o f u , r e d u c e v t o W H N F , b i n d y
t o v a l u e o f v , t h e n r e d u c e t . A l t e r n a t i v e l y , i t i s s a f e t o r e d u c e t , u , a n d v i n p a r a l l e l , b u t
n o t t o a l l o w a c c e s s t o t h e r e s u l t u n t i l b o t h u a n d v a r e i n W H N F .
4 M a n i p u l a t i n g s t a t e
P r o c e d u r a l p r o g r a m m i n g l a n g u a g e s o p e r a t e b y a s s i g n i n g t o a s t a t e ; t h i s i s a l s o p o s s i b l e i n
i m p u r e f u n c t i o n a l l a n g u a g e s s u c h a s S t a n d a r d M L . I n p u r e f u n c t i o n a l l a n g u a g e s , a s s i g n -
m e n t m a y b e s i m u l a t e d b y p a s s i n g a r o u n d a v a l u e r e p r e s e n t i n g t h e c u r r e n t s t a t e . T h i s
s e c t i o n s h o w s h o w t h e m o n a d o f s t a t e t r a n s f o r m e r s a n d t h e c o r r e s p o n d i n g c o m p r e h e n s i o n
c a n b e u s e d t o s t r u c t u r e p r o g r a m s w r i t t e n i n t h i s s t y l e .
9
-
8/3/2019 Comprehending Monads
10/38
4 . 1 S t a t e t r a n s f o r m e r s
F i x a t y p e S o f s t a t e s . T h e m o n a d o f s t a t e t r a n s f o r m e r s S T i s d e n e d b y
t y p e S T x = S ! ( x ; S )
m a p
S T
f x = s ! ( f x ; s
0
) ( x ; s
0
) x s
I d
u n i t
S T
x = s ! ( x ; s )
j o i n
S T
x = s ! ( x ; s
0 0
) ( x ; s
0
) x s ; ( x ; s
0 0
) x s
0 I d
( R e c a l l t h e e q u i v a l e n c e o f I d - c o m p r e h e n s i o n s a n d \ l e t " t e r m s a s e x p l a i n e d i n S e c t i o n 3 . 1 . )
A s t a t e t r a n s f o r m e r o f t y p e x t a k e s a s t a t e a n d r e t u r n s a v a l u e o f t y p e x a n d a n e w s t a t e .
T h e u n i t t a k e s t h e v a l u e x i n t o t h e s t a t e t r a n s f o r m e r s ! ( x ; s ) t h a t r e t u r n s x a n d
l e a v e s t h e s t a t e u n c h a n g e d . W e h a v e t h a t
( x ; y ) x x ; y y
S T
= s ! ( ( x ; y ) ; s
0 0
) ( x ; s
0
) x s ; ( y ; s
0 0
) y s
0 I d
T h i s a p p l i e s t h e s t a t e t r a n s f o r m e r x t o t h e s t a t e s , y i e l d i n g t h e v a l u e x a n d t h e n e w s t a t e
s
0
; i t t h e n a p p l i e s a s e c o n d t r a n s f o r m e r y t o t h e s t a t e s
0
y i e l d i n g t h e v a l u e y a n d t h e
n e w e r s t a t e s
0 0
; n a l l y , i t r e t u r n s a v a l u e c o n s i s t i n g o f x p a i r e d w i t h y a n d t h e n a l s t a t e
s
0 0
T w o u s e f u l o p e r a t i o n s i n t h i s m o n a d a r e
f e t c h : : S T S
f e t c h = s ! ( s ; s )
a s s i g n : : S ! S T ( )
a s s i g n s
0
= s ! ( ( ) ; s
0
)
T h e r s t o f t h e s e f e t c h e s t h e c u r r e n t v a l u e o f t h e s t a t e , l e a v i n g t h e s t a t e u n c h a n g e d ; t h e
s e c o n d d i s c a r d s t h e o l d s t a t e , a s s i g n i n g t h e n e w s t a t e t o b e t h e g i v e n v a l u e . H e r e ( ) i s
t h e t y p e t h a t c o n t a i n s o n l y t h e v a l u e ( ) .
A t h i r d u s e f u l o p e r a t i o n i s
i n i t : : S ! S T x ! x
i n i t s x = x ( x ; s
0
) x s
I d
T h i s a p p l i e s t h e s t a t e t r a n s f o r m e r x t o a g i v e n i n i t i a l s t a t e s ; i t r e t u r n s t h e v a l u e c o m p u t e d
b y t h e s t a t e t r a n s f o r m e r w h i l e d i s c a r d i n g t h e n a l s t a t e .
4 . 2 E x a m p l e : R e n a m i n g
S a y w e w i s h t o r e n a m e a l l b o u n d v a r i a b l e s i n a l a m b d a t e r m . A s u i t a b l e d a t a t y p e T e r m
f o r r e p r e s e n t i n g l a m b d a t e r m s i s d e n e d i n F i g u r e 1 ( i n S t a n d a r d M L ) a n d F i g u r e 2 ( i n
H a s k e l l ) . N e w n a m e s a r e t o b e g e n e r a t e d b y c o u n t i n g ; w e a s s u m e t h e r e i s a f u n c t i o n
m k n a m e : : I n t ! N a m e
1 0
-
8/3/2019 Comprehending Monads
11/38
t h a t g i v e n a n i n t e g e r c o m p u t e s a n a m e . W e a l s o a s s u m e a f u n c t i o n
s u b s t : : N a m e ! N a m e ! T e r m ! T e r m
s u c h t h a t s u b s t x
0
x t s u b s t i t u t e s x
0
f o r e a c h f r e e o c c u r r e n c e o f x i n t
A s o l u t i o n t o t h i s p r o b l e m i n t h e i m p u r e f u n c t i o n a l l a n g u a g e S t a n d a r d M L i s s h o w n
i n F i g u r e 1 . T h e i m p u r e f e a t u r e w e a r e c o n c e r n e d w i t h h e r e i s s t a t e : t h e s o l u t i o n u s e s
a r e f e r e n c e N t o a n a s s i g n a b l e l o c a t i o n c o n t a i n i n g a n i n t e g e r . T h e \ f u n c t i o n s " a n d t h e i r
t y p e s a r e :
n e w n a m e : : ( ) ! N a m e ;
r e n a m e r : : T e r m ! T e r m ;
r e n a m e : : T e r m ! T e r m
N o t e t h a t n e w n a m e a n d r e n a m e r a r e n o t t r u e f u n c t i o n s a s t h e y d e p e n d o n t h e s t a t e .
I n p a r t i c u l a r , n e w n a m e r e t u r n s a d i e r e n t n a m e e a c h t i m e i t i s c a l l e d , a n d s o r e q u i r e s
t h e d u m m y p a r a m e t e r ( ) t o g i v e i t t h e f o r m o f a \ f u n c t i o n " . H o w e v e r , r e n a m e i s a
t r u e f u n c t i o n , s i n c e i t a l w a y s g e n e r a t e s n e w n a m e s s t a r t i n g f r o m 0 . U n d e r s t a n d i n g t h e
p r o g r a m r e q u i r e s a k n o w l e d g e o f w h i c h \ f u n c t i o n s " a e c t t h e s t a t e a n d w h i c h d o n o t .
T h i s i s n o t a l w a y s e a s y t o s e e { r e n a m e r i s n o t a t r u e f u n c t i o n , e v e n t h o u g h i t d o e s n o t
c o n t a i n a n y d i r e c t r e f e r e n c e t o t h e s t a t e N , b e c a u s e i t d o e s c o n t a i n a n i n d i r e c t r e f e r e n c e
t h r o u g h n e w n a m e ; b u t r e n a m e i s a t r u e f u n c t i o n , e v e n t h o u g h i t r e f e r e n c e s r e n a m e r
A n e q u i v a l e n t s o l u t i o n i n a p u r e f u n c t i o n a l l a n g u a g e i s s h o w n i n F i g u r e 2 . T h i s
e x p l i c i t l y p a s s e s a r o u n d a n i n t e g e r t h a t i s u s e d t o g e n e r a t e n e w n a m e s . T h e f u n c t i o n s
a n d t h e i r t y p e s a r e :
n e w n a m e : : I n t ! ( N a m e ; I n t ) ;
r e n a m e r : : T e r m ! I n t ! ( T e r m ; I n t ) ;
r e n a m e : : T e r m ! T e r m
T h e f u n c t i o n n e w n a m e g e n e r a t e s a n e w n a m e f r o m t h e i n t e g e r a n d r e t u r n s a n i n c r e m e n t e d
i n t e g e r ; t h e f u n c t i o n r e n a m e r t a k e s a t e r m a n d a n i n t e g e r a n d r e t u r n s a r e n a m e d t e r m
( w i t h n a m e s g e n e r a t e d f r o m t h e g i v e n i n t e g e r ) p a i r e d w i t h t h e n a l i n t e g e r g e n e r a t e d .
T h e f u n c t i o n r e n a m e t a k e s a t e r m a n d r e t u r n s a r e n a m e d t e r m ( w i t h n a m e s g e n e r a t e d
f r o m 0 ) . T h i s p r o g r a m i s s t r a i g h t f o r w a r d , b u t c a n b e d i c u l t t o r e a d b e c a u s e i t c o n t a i n s
a g r e a t d e a l o f \ p l u m b i n g " t o p a s s a r o u n d t h e s t a t e . I t i s r e l a t i v e l y e a s y t o i n t r o d u c e
e r r o r s i n t o s u c h p r o g r a m s , b y w r i t i n g n w h e r e n
0
i s i n t e n d e d o r t h e l i k e . T h i s \ p l u m b i n g
p r o b l e m " c a n b e m o r e s e v e r e i n a p r o g r a m o f g r e a t e r c o m p l e x i t y .
F i n a l l y , a s o l u t i o n o f t h i s p r o b l e m u s i n g t h e m o n a d o f s t a t e t r a n s f o r m e r s i s s h o w n i n
F i g u r e 3 . T h e s t a t e i s t a k e n a s S = I n t . T h e f u n c t i o n s a n d t h e i r t y p e s a r e n o w :
n e w n a m e : : S T N a m e ;
r e n a m e r : : T e r m ! S T N a m e ;
r e n a m e : : T e r m ! T e r m
T h e m o n a d i c p r o g r a m i s s i m p l y a d i e r e n t w a y o f w r i t i n g t h e p u r e p r o g r a m : e x p a n d i n g t h e
m o n a d c o m p r e h e n s i o n s i n F i g u r e 3 a n d s i m p l i f y i n g w o u l d y i e l d t h e p r o g r a m i n F i g u r e 2 .
1 1
-
8/3/2019 Comprehending Monads
12/38
T y p e s i n t h e m o n a d i c p r o g r a m c a n b e s e e n t o c o r r e s p o n d d i r e c t l y t o t h e t y p e s i n t h e
i m p u r e p r o g r a m : a n i m p u r e \ f u n c t i o n " o f t y p e U ! V t h a t a e c t s t h e s t a t e c o r r e s p o n d s
t o a p u r e f u n c t i o n o f t y p e U ! S T V . T h u s , r e n a m e r h a s t y p e T e r m ! T e r m i n t h e
i m p u r e p r o g r a m , a n d t y p e T e r m ! S T T e r m i n t h e m o n a d i c p r o g r a m ; a n d n e w n a m e
h a s t y p e ( ) ! N a m e i n t h e i m p u r e p r o g r a m , a n d t y p e S T N a m e , w h i c h i s i s o m o r p h i c t o
( ) ! S T N a m e , i n t h e p u r e p r o g r a m . U n l i k e t h e i m p u r e p r o g r a m , t y p e s i n t h e m o n a d i c
p r o g r a m m a k e m a n i f e s t w h e r e t h e s t a t e i s a e c t e d ( a n d s o d o t h e S T - c o m p r e h e n s i o n s ) .
T h e \ p l u m b i n g " i s n o w h a n d l e d i m p l i c i t l y b y t h e s t a t e t r a n s f o r m e r r a t h e r t h a n e x p l i c -
i t l y . V a r i o u s k i n d s o f e r r o r s t h a t a r e p o s s i b l e i n t h e p u r e p r o g r a m ( s u c h a s a c c i d e n t a l l y
w r i t i n g n i n p l a c e o f n
0
) a r e i m p o s s i b l e i n t h e m o n a d i c p r o g r a m . F u r t h e r , t h e t y p e s y s -
t e m e n s u r e s t h a t p l u m b i n g i s h a n d l e d i n a n a p p r o p r i a t e w a y . F o r e x a m p l e , o n e m i g h t
b e t e m p t e d t o w r i t e , s a y , A p p ( r e n a m e r t ) ( r e n a m e r u ) f o r t h e r i g h t - h a n d s i d e o f t h e l a s t
e q u a t i o n d e n i n g r e n a m e r , b u t t h i s w o u l d b e d e t e c t e d a s a t y p e e r r o r .
S a f e t y c a n b e f u r t h e r e n s u r e d b y m a k i n g S T i n t o a n a b s t r a c t d a t a t y p e o n w h i c h
m a p
S T
, u n i t
S T
, j o i n
S T
, f e t c h , a s s i g n , a n d i n i t a r e t h e o n l y o p e r a t i o n s . T h i s g u a r a n t e e s
t h a t o n e c a n n o t m i x t h e s t a t e t r a n s f o r m e r a b s t r a c t i o n w i t h o t h e r f u n c t i o n s w h i c h h a n d l e
t h e s t a t e i n a p p r o p r i a t e l y . T h i s i d e a w i l l b e p u r s u e d i n t h e n e x t s e c t i o n .
I m p u r e f u n c t i o n a l l a n g u a g e s ( s u c h a s S t a n d a r d M L ) a r e r e s t r i c t e d t o u s i n g a s t r i c t
( o r c a l l - b y - v a l u e ) o r d e r o f e v a l u a t i o n , b e c a u s e o t h e r w i s e t h e e e c t o f t h e a s s i g n m e n t s
b e c o m e s v e r y d i c u l t t o p r e d i c t . P r o g r a m s u s i n g t h e m o n a d o f s t a t e t r a n s f o r m e r s c a n b e
w r i t t e n i n l a n g u a g e s u s i n g e i t h e r a s t r i c t ( c a l l - b y - v a l u e ) o r l a z y ( c a l l - b y - n a m e ) o r d e r o f
e v a l u a t i o n . T h e s t a t e - t r a n s f o r m e r c o m p r e h e n s i o n s m a k e c l e a r e x a c t l y t h e o r d e r i n w h i c h
t h e a s s i g n m e n t s t a k e e e c t , r e g a r d l e s s o f t h e o r d e r o f e v a l u a t i o n u s e d .
R e a s o n i n g a b o u t p r o g r a m s i n i m p u r e f u n c t i o n a l l a n g u a g e s i s p r o b l e m a t i c ( a l t h o u g h
n o t i m p o s s i b l e { s e e M T 8 9 ] f o r o n e a p p r o a c h ) . I n c o n t r a s t , p r o g r a m s w r i t t e n u s i n g
m o n a d s , l i k e a l l p u r e p r o g r a m s , c a n b e r e a s o n e d a b o u t i n t h e u s u a l w a y , s u b s t i t u t i n g
e q u a l s f o r e q u a l s . T h e y a l s o s a t i s f y a d d i t i o n a l l a w s , s u c h a s t h e f o l l o w i n g l a w s o n q u a l i e r s :
x f e t c h ; y f e t c h = x f e t c h ; y x
S T
;
( ) a s s i g n u ; y f e t c h = ( ) a s s i g n u ; y u
S T
;
( ) a s s i g n u ; ( ) a s s i g n v = ( ) a s s i g n v ;
a n d o n t e r m s :
i n i t u t
S T
= t ;
i n i t u t ( ) a s s i g n v ; q
S T
= i n i t v t q
S T
;
i n i t u t q ; ( ) a s s i g n v
S T
= i n i t u t q
S T
T h e s e , t o g e t h e r w i t h t h e c o m p r e h e n s i o n l a w s ( 5 ) , ( 6 ) , a n d ( I
0
) ? ? ( I I I
0
) , a l l o w o n e t o
u s e e q u a t i o n a l r e a s o n i n g t o p r o v e p r o p e r t i e s o f p r o g r a m s t h a t m a n i p u l a t e s t a t e .
1 2
-
8/3/2019 Comprehending Monads
13/38
4 . 3 A r r a y u p d a t e
L e t A r r b e t h e t y p e o f a r r a y s t a k i n g i n d e x e s o f t y p e I x a n d y i e l d i n g v a l u e s o f t y p e V a l
T h e k e y o p e r a t i o n s o n t h i s t y p e a r e
n e w a r r a y : : V a l ! A r r ;
i n d e x : : I x ! A r r ! V a l ;
u p d a t e : : I x ! V a l ! A r r ! A r r
H e r e n e w a r r a y v r e t u r n s a n a r r a y w i t h a l l e n t r i e s s e t t o v ; a n d i n d e x i a r e t u r n s t h e v a l u e
a t i n d e x i i n a r r a y a ; a n d u p d a t e i v a r e t u r n s a n a r r a y w h e r e i n d e x i h a s v a l u e v a n d t h e
r e m a i n d e r i s i d e n t i c a l t o a . I n e q u a t i o n s ,
i n d e x i ( n e w a r r a y v ) = v ;
i n d e x i ( u p d a t e i v a ) = v ;
i n d e x i ( u p d a t e i
0
v a ) = i n d e x i a ; i f i 6= i
0
T h e e c i e n t w a y t o i m p l e m e n t t h e u p d a t e o p e r a t i o n i s t o o v e r w r i t e t h e s p e c i e d e n t r y o f
t h e a r r a y , b u t i n a p u r e f u n c t i o n a l l a n g u a g e t h i s i s o n l y s a f e i f t h e r e a r e n o o t h e r p o i n t e r s
t o t h e a r r a y e x t a n t w h e n t h e u p d a t e o p e r a t i o n i s p e r f o r m e d .
N o w c o n s i d e r t h e m o n a d o f s t a t e t r a n s f o r m e r s t a k i n g t h e s t a t e t y p e S = A r r , s o t h a t
t y p e S T x = A r r ! ( x ; A r r )
V a r i a n t s o f t h e f e t c h a n d a s s i g n o p e r a t i o n s c a n b e d e n e d t o a c t o n a n a r r a y e n t r y s p e c i e d
b y a g i v e n i n d e x , a n d a v a r i a n t o f i n i t c a n b e d e n e d t o i n i t i a l i s e a l l e n t r i e s i n a n a r r a y
t o a g i v e n v a l u e :
f e t c h : : I x ! S T V a l
f e t c h i = a ! ( v ; a ) v i n d e x i a
S t r
a s s i g n : : I x ! V a l ! S T ( )
a s s i g n i v = a ! ( ( ) ; u p d a t e i v a )
i n i t : : V a l ! S T x ! x
i n i t v x = x ( x ; a ) x ( n e w a r r a y v )
I d
A S t r - c o m p r e h e n s i o n i s u s e d i n f e t c h t o f o r c e t h e e n t r y f r o m a t o b e f e t c h e d b e f o r e a i s
m a d e a v a i l a b l e f o r f u r t h e r a c c e s s ; t h i s i s e s s e n t i a l i n o r d e r f o r i t t o b e s a f e t o u p d a t e a b y
o v e r w r i t i n g .
N o w , s a y w e m a k e S T i n t o a n a b s t r a c t d a t a t y p e s u c h t h a t t h e o n l y o p e r a t i o n s o n
v a l u e s o f t y p e S T a r e m a p
S T
, u n i t
S T
, j o i n
S T
, f e t c h , a s s i g n , a n d i n i t . I t i s s t r a i g h t f o r w a r d
t o s h o w t h a t e a c h o f t h e s e o p e r a t i o n s , w h e n p a s s e d t h e s o l e p o i n t e r t o a n a r r a y , r e t u r n s
a s i t s s e c o n d c o m p o n e n t t h e s o l e p o i n t e r t o a n a r r a y . S i n c e t h e s e a r e t h e o n l y o p e r a t i o n s
t h a t m a y b e u s e d t o b u i l d a t e r m o f t y p e S T , t h i s g u a r a n t e e s t h a t i t i s s a f e t o i m p l e m e n t
t h e a s s i g n o p e r a t i o n b y o v e r w r i t i n g t h e s p e c i e d a r r a y e n t r y .
T h e k e y i d e a h e r e i s t h e u s e o f t h e a b s t r a c t d a t a t y p e . M o n a d c o m p r e h e n s i o n s a r e n o t
e s s e n t i a l f o r t h i s t o w o r k , t h e y m e r e l y p r o v i d e a d e s i r a b l e s y n t a x .
1 3
-
8/3/2019 Comprehending Monads
14/38
4 . 4 E x a m p l e : I n t e r p r e t e r
C o n s i d e r b u i l d i n g a n i n t e r p r e t e r f o r a s i m p l e i m p e r a t i v e l a n g u a g e . T h e s t o r e o f t h i s
l a n g u a g e w i l l b e m o d e l l e d b y a s t a t e o f t y p e A r r , s o w e w i l l t a k e I x t o b e t h e t y p e o f
v a r i a b l e n a m e s , a n d V a l t o b e t h e t y p e o f v a l u e s s t o r e d i n v a r i a b l e s . T h e a b s t r a c t s y n t a x
f o r t h i s l a n g u a g e i s r e p r e s e n t e d b y t h e f o l l o w i n g d a t a t y p e s :
d a t a E x p = V a r I x C o n s t V a l P l u s E x p E x p
d a t a C o m = A s g n I x E x p S e q C o m C o m I f E x p C o m C o m
d a t a P r o g = P r o g C o m E x p
A n e x p r e s s i o n i s a v a r i a b l e , a c o n s t a n t , o r t h e s u m o f t w o e x p r e s s i o n s ; a c o m m a n d i s a n
a s s i g n m e n t , a s e q u e n c e o f t w o c o m m a n d s , o r a c o n d i t i o n a l ; a n d a p r o g r a m c o n s i s t s o f a
c o m m a n d f o l l o w e d b y a n e x p r e s s i o n .
A v e r s i o n o f t h e i n t e r p r e t e r i n a p u r e f u n c t i o n a l l a n g u a g e i s s h o w n i n F i g u r e 4 . T h e
i n t e r p r e t e r c a n b e r e a d a s a d e n o t a t i o n a l s e m a n t i c s f o r t h e l a n g u a g e , w i t h t h r e e s e m a n t i c
f u n c t i o n s :
e x p : : E x p ! A r r ! V a l ;
c o m : : C o m ! A r r ! A r r ;
p r o g : : P r o g ! V a l
T h e s e m a n t i c s o f a n e x p r e s s i o n t a k e s a s t o r e i n t o a v a l u e ; t h e s e m a n t i c s o f a c o m m a n d
t a k e s a s t o r e i n t o a s t o r e ; a n d t h e s e m a n t i c s o f a p r o g r a m i s a v a l u e . A p r o g r a m c o n s i s t s o f
a c o m m a n d f o l l o w e d b y a n e x p r e s s i o n ; i t s v a l u e i s d e t e r m i n e d b y a p p l y i n g t h e c o m m a n d
t o a n i n i t i a l s t o r e w h e r e a l l v a r i a b l e s h a v e t h e v a l u e 0 , a n d t h e n e v a l u a t i n g t h e e x p r e s s i o n
i n t h e c o n t e x t o f t h e r e s u l t i n g s t o r e .
T h e i n t e r p r e t e r u s e s t h e a r r a y o p e r a t i o n s n e w a r r a y , i n d e x , a n d u p d a t e . A s i t h a p p e n s ,
i t i s s a f e t o p e r f o r m t h e u p d a t e s i n p l a c e f o r t h i s p r o g r a m , b u t t o d i s c o v e r t h i s r e q u i r e s
u s i n g o n e o f t h e s p e c i a l a n a l y s i s t e c h n i q u e s c i t e d i n t h e i n t r o d u c t i o n .
T h e s a m e i n t e r p r e t e r h a s b e e n r e w r i t t e n i n F i g u r e 5 u s i n g s t a t e t r a n s f o r m e r s . T h e
s e m a n t i c f u n c t i o n s n o w h a v e t h e t y p e s :
e x p : : E x p ! S T V a l ;
c o m : : C o m ! S T ( ) ;
p r o g : : P r o g ! V a l
T h e s e m a n t i c s o f a n e x p r e s s i o n d e p e n d s o n t h e s t a t e a n d r e t u r n s a v a l u e ; t h e s e m a n t i c s
o f a c o m m a n d t r a n s f o r m s t h e s t a t e o n l y ; t h e s e m a n t i c s o f a p r o g r a m , a s b e f o r e , i s j u s t
a v a l u e . A c c o r d i n g t o t h e t y p e s , t h e s e m a n t i c s o f a n e x p r e s s i o n m i g h t a l t e r t h e s t a t e ,
a l t h o u g h i n f a c t e x p r e s s i o n s d e p e n d t h e s t a t e b u t d o n o t c h a n g e i t { w e w i l l r e t u r n t o t h i s
p r o b l e m s h o r t l y .
T h e a b s t r a c t d a t a t y p e f o r S T g u a r a n t e e s t h a t i t i s s a f e t o p e r f o r m u p d a t e s ( i n d i c a t e d
b y a s s i g n ) i n p l a c e { n o s p e c i a l a n a l y s i s t e c h n i q u e i s r e q u i r e d . I t i s e a s y t o s e e h o w
t h e m o n a d i n t e r p r e t e r c a n b e d e r i v e d f r o m t h e o r i g i n a l , a n d ( u s i n g t h e d e n i t i o n s g i v e n
e a r l i e r ) t h e p r o o f o f t h e i r e q u i v a l e n c e i s s t r a i g h t f o r w a r d .
1 4
-
8/3/2019 Comprehending Monads
15/38
T h e p r o g r a m w r i t t e n u s i n g s t a t e t r a n s f o r m e r s h a s a s i m p l e i m p e r a t i v e r e a d i n g . F o r
i n s t a n c e , t h e l i n e
c o m ( S e q c
1
c
2
) = ( ) ( ) c o m c
1
; ( ) c o m c
2
S T
c a n b e r e a d \ t o e v a l u a t e t h e c o m m a n d S e q c
1
c
2
, r s t e v a l u a t e c
1
a n d t h e n e v a l u a t e
c
2
" . T h e t y p e s a n d t h e u s e o f t h e S T c o m p r e h e n s i o n m a k e c l e a r t h a t t h e s e o p e r a t i o n s
t r a n s f o r m t h e s t a t e ; f u r t h e r , t h a t t h e v a l u e s r e t u r n e d a r e o f t y p e ( ) m a k e s i t c l e a r t h a t
o n l y t h e e e c t o n t h e s t a t e i s o f i n t e r e s t h e r e .
O n e d r a w b a c k o f t h i s p r o g r a m i s t h a t i t i n t r o d u c e s t o o m u c h s e q u e n c i n g . T h e l i n e
e x p ( P l u s e
1
e
2
) = v
1
+ v
2
v
1
e x p e
1
; v
2
e x p e
2
S T
c a n b e r e a d \ t o e v a l u a t e P l u s e
1
e
2
, r s t e v a l u a t e e
1
y i e l d i n g t h e v a l u e v
1
, t h e n e v a l u a t e
e
2
y i e l d i n g t h e v a l u e v
2
, t h e n a d d v
1
a n d v
2
" . T h i s i s u n f o r t u n a t e : i t i m p o s e s a s p u r i o u s
o r d e r i n g o n t h e e v a l u a t i o n o f e
1
a n d e
2
( t h e o r i g i n a l p r o g r a m i m p l i e s n o s u c h o r d e r i n g ) .
T h e o r d e r d o e s n o t m a t t e r b e c a u s e a l t h o u g h e x p d e p e n d s o n t h e s t a t e , i t d o e s n o t c h a n g e
i t . B u t , a s a l r e a d y n o t e d , t h e r e i s n o w a y t o e x p r e s s t h i s u s i n g j u s t t h e m o n a d o f s t a t e
t r a n s f o r m e r s . T o r e m e d y t h i s w e w i l l i n t r o d u c e a s e c o n d m o n a d , t h a t o f s t a t e r e a d e r s .
4 . 5 S t a t e r e a d e r s
R e c a l l t h a t t h e m o n a d o f s t a t e t r a n s f o r m e r s , f o r a x e d t y p e S o f s t a t e s , i s g i v e n b y
t y p e S T x = S ! ( x ; S )
T h e m o n a d o f s t a t e r e a d e r s , f o r t h e s a m e t y p e S o f s t a t e s , i s g i v e n b y
t y p e S R x = S ! x
m a p
S R
f
b
x = s ! f x x
b
x s
I d
u n i t
S R
x = s ! x
j o i n
S R
b
b
x = s ! x
b
x
b
b
x s ; x
b
x s
I d
H e r e
b
x i s a v a r i a b l e o f t y p e S R x , j u s t a s x i s a v a r i a b l e o f t y p e S T x . A s t a t e r e a d e r o f
t y p e x t a k e s a s t a t e a n d r e t u r n s a v a l u e ( o f t y p e x ) , b u t n o n e w s t a t e . T h e u n i t t a k e s
t h e v a l u e x i n t o t h e s t a t e t r a n s f o r m e r s ! x t h a t i g n o r e s t h e s t a t e a n d r e t u r n s x W e
h a v e t h a t
( x ; y ) x
b
x ; y
b
y
S R
= s ! ( x ; y ) x
b
x s ; y
b
y s
I d
T h i s a p p l i e s t h e s t a t e r e a d e r s
b
x a n d
b
y t o t h e s t a t e s , y i e l d i n g t h e v a l u e s x a n d y , w h i c h
a r e r e t u r n e d i n a p a i r .
I t i s e a s y t o s e e t h a t
( x ; y ) x
b
x ; y
b
y
S R
= ( x ; y ) y
b
y ; x
b
x
S R
;
1 5
-
8/3/2019 Comprehending Monads
16/38
s o t h a t t h e o r d e r i n w h i c h
b
x a n d
b
y a r e c o m p u t e d i s i r r e l e v a n t . A m o n a d w i t h t h i s p r o p e r t y
i s c a l l e d c o m m u t a t i v e , s i n c e i t f o l l o w s t h a t
t p ; q
S R
= t q ; p
S R
f o r a n y t e r m t , a n d a n y q u a l i e r s p a n d q s u c h t h a t p b i n d s n o f r e e v a r i a b l e s o f q a n d
v i c e - v e r s a . T h u s s t a t e r e a d e r s c a p t u r e t h e n o t i o n o f o r d e r i n d e p e n d e n c e t h a t w e d e s i r e
f o r e x p r e s s i o n e v a l u a t i o n i n t h e i n t e r p r e t e r e x a m p l e .
T w o u s e f u l o p e r a t i o n s i n t h i s m o n a d a r e
f e t c h : : S R S
f e t c h = s ! s
r o : : S R x ! S T x
r o
b
x = s ! ( x ; s ) x
b
x s
I d
T h e r s t i s t h e e q u i v a l e n t o f t h e p r e v i o u s f e t c h , b u t n o w e x p r e s s e d a s a s t a t e r e a d e r r a t h e r
t h a n a s t a t e t r a n s f o r m e r . T h e s e c o n d c o n v e r t s a s t a t e r e a d e r i n t o t h e c o r r e s p o n d i n g s t a t e
t r a n s f o r m e r : o n e t h a t r e t u r n s t h e s a m e v a l u e a s t h e s t a t e r e a d e r , a n d l e a v e s t h e s t a t e
u n c h a n g e d . ( T h e n a m e r o a b b r e v i a t e s \ r e a d o n l y " . )
I n t h e s p e c i c c a s e w h e r e S i s t h e a r r a y t y p e A r r , w e d e n e
f e t c h : : I x ! S R V a l
f e t c h i = a ! i n d e x i a
I n o r d e r t o g u a r a n t e e t h e s a f e t y o f u p d a t e b y o v e r w r i t i n g , i t i s n e c e s s a r y t o m o d i f y t w o
o f t h e o t h e r d e n i t i o n s t o u s e S t r - c o m p r e h e n s i o n s r a t h e r t h a n I d - c o m p r e h e n s i o n s :
m a p
S R
f
b
x = a ! f x x
b
x a
S t r
r o
b
x = a ! ( x ; a ) x
b
x a
S t r
T h e s e c o r r e s p o n d t o t h e u s e o f a n S t r - c o m p r e h e n s i o n i n t h e S T v e r s i o n o f f e t c h
T h u s , f o r a r r a y s , t h e c o m p l e t e c o l l e c t i o n o f o p e r a t i o n s o n s t a t e t r a n s f o r m e r s a n d s t a t e
r e a d e r s c o n s i s t s o f
f e t c h : : I x ! S R V a l ;
a s s i g n : : I x ! V a l ! S T ( ) ;
r o : : S R x ! S T x ;
i n i t : : V a l ! S T x ! x ;
t o g e t h e r w i t h m a p
S R
, u n i t
S R
, j o i n
S R
a n d m a p
S T
, u n i t
S T
, j o i n
S T
. T h e s e t e n o p e r a t i o n s
s h o u l d b e d e n e d t o g e t h e r a n d c o n s t i t u t e a l l t h e w a y s o f m a n i p u l a t i n g t h e t w o m u t u a l l y
d e n e d a b s t r a c t d a t a t y p e s S R x a n d S T x . I t i s s t r a i g h t f o r w a r d t o s h o w t h a t e a c h
o p e r a t i o n o f t y p e S R , w h e n p a s s e d a n a r r a y , r e t u r n s a v a l u e t h a t c o n t a i n s n o p o i n t e r t o
t h a t a r r a y o n c e i t h a s b e e n r e d u c e d t o w e a k h e a d n o r m a l f o r m ( W H N F ) ; a n d t h a t e a c h
o p e r a t i o n s o f t y p e S T , w h e n p a s s e d t h e s o l e p o i n t e r t o a n a r r a y , r e t u r n s a s i t s s e c o n d
c o m p o n e n t t h e s o l e p o i n t e r t o a n a r r a y . S i n c e t h e s e a r e t h e o n l y o p e r a t i o n s t h a t m a y b e
1 6
-
8/3/2019 Comprehending Monads
17/38
-
8/3/2019 Comprehending Monads
18/38
R e c a l l t h a t c o m p r e h e n s i o n s o f t h e f o r m t ] a r e d e n e d i n t e r m s o f t h e q u a l i e r , b y
t a k i n g t = t ] , a n d t h a t i s a u n i t f o r q u a l i e r c o m p o s i t i o n ,
t ; q = t q = t q ;
S i m i l a r l y , w e w i l l d e n e c o m p r e h e n s i o n s o f t h e f o r m ] i n t e r m s o f a n e w q u a l i e r , ; , b y
t a k i n g ] = t ; ] , a n d w e w i l l r e q u i r e t h a t ; i s a z e r o f o r q u a l i e r c o m p o s i t i o n ,
t ; ; q = t ; = t q ; ;
U n l i k e w i t h t ] , t h e v a l u e o f t ; ] i s i n d e p e n d e n t o f t !
R e c a l l t h a t f o r w e i n t r o d u c e d a f u n c t i o n u n i t : : x ! M x s a t i s f y i n g t h e l a w s
( i i i ) m a p f u n i t = u n i t f ;
( I ) j o i n u n i t = i d ;
( I I ) j o i n m a p u n i t = i d ;
a n d t h e n d e n e d t = u n i t t
S i m i l a r l y , f o r ; w e i n t r o d u c e a f u n c t i o n
z e r o : : y ! M x ;
s a t i s f y i n g t h e l a w s
( v ) m a p f z e r o = z e r o g ;
( I V ) j o i n z e r o = z e r o ;
( V ) j o i n m a p z e r o = z e r o
a n d d e n e
( 7 ) t ; = z e r o t
L a w ( v ) s p e c i e s t h a t t h e r e s u l t o f z e r o i s i n d e p e n d e n t o f i t s a r g u m e n t , a n d c a n b e d e r i v e d
f r o m t h e t y p e o f z e r o ( a g a i n , s e e R e y 8 3 , W a d 8 9 ] ) . I n t h e c a s e o f l i s t s , s e t t i n g z e r o y =
m a k e s l a w s ( I V ) a n d ( V ) h o l d , s i n c e j o i n ] = ] a n d j o i n ; : : : ; ] ] = ] . ( T h i s i g n o r e s
w h a t h a p p e n s w h e n z e r o i s a p p l i e d t o , w h i c h w i l l b e c o n s i d e r e d b e l o w . )
N o w , f o r a m o n a d w i t h z e r o w e c a n e x t e n d c o m p r e h e n s i o n s t o c o n t a i n a n e w f o r m o f
q u a l i e r , t h e l t e r , d e n e d b y
( 8 ) t b ] = i f b t h e n t ] e l s e ] ;
w h e r e b i s a n y b o o l e a n - v a l u e d t e r m . R e c a l l t h a t l a w s ( 4 ) a n d ( 6 ) w e r e p r o v e d b y i n d u c t i o n
o n t h e f o r m o f q u a l i e r s ; w e c a n s h o w t h a t f o r t h e n e w f o r m s o f q u a l i e r s , d e n e d b y ( 7 )
a n d ( 8 ) , t h e y s t i l l h o l d . W e a l s o h a v e n e w l a w s
( 9 ) t b ; c = t ( b c ) ;
( 1 0 ) t q ; b = t b ; q ;
w h e r e b a n d c a r e b o o l e a n - v a l u e d t e r m s , a n d w h e r e q i s a n y q u a l i e r n o t b i n d i n g v a r i a b l e s
f r e e i n b
1 8
-
8/3/2019 Comprehending Monads
19/38
W h e n d e a l i n g w i t h a s a p o t e n t i a l v a l u e , m o r e c a r e i s r e q u i r e d . I n a s t r i c t l a n g u a g e ,
w h e r e a l l f u n c t i o n s ( i n c l u d i n g z e r o ) a r e s t r i c t , t h e r e i s n o p r o b l e m . B u t i n a l a z y l a n g u a g e ,
i n t h e c a s e o f l i s t s , l a w s ( v ) a n d ( I V ) h o l d , b u t l a w ( V ) i s a n i n e q u a l i t y , j o i n m a p z e r o v
z e r o , s i n c e j o i n ( m a p z e r o ) = b u t z e r o = ] . I n t h i s c a s e , l a w s ( 1 ) { ( 9 ) a r e s t i l l
v a l i d , b u t l a w ( 1 0 ) h o l d s o n l y i f t q 6= . I n t h e c a s e t h a t t q = , l a w ( 1 0 )
b e c o m e s a n i n e q u a l i t y , t q ; b v t b ; q
A s a s e c o n d e x a m p l e o f a m o n a d w i t h a z e r o , c o n s i d e r t h e s t r i c t n e s s m o n a d S t r d e n e d
i n S e c t i o n 3 . 2 . F o r t h i s m o n a d , a z e r o m a y b e d e n e d b y z e r o
S t r
y = . I t i s e a s y t o v e r i f y
t h a t t h e r e q u i r e d l a w s h o l d ; u n l i k e w i t h l i s t s , t h e l a w s h o l d e v e n w h e n z e r o i s a p p l i e d t o
F o r e x a m p l e , x ? 1 x 1
S t r
r e t u r n s o n e l e s s t h a n x i f x i s p o s i t i v e , a n d o t h e r w i s e .
6 M o n a d m o r p h i s m s
I f M a n d N a r e t w o m o n a d s , t h e n h : : M x ! N x i s a m o n a d m o r p h i s m f r o m M t o N i f
i t p r e s e r v e s t h e m o n a d o p e r a t i o n s :
h m a p
M
f = m a p
N
f h ;
h u n i t
M
= u n i t
N
;
h j o i n
M
= j o i n
N
h
2
;
w h e r e h
2
= h m a p
M
h = m a p
N
h h ( t h e t w o c o m p o s i t e s a r e e q u a l b y t h e r s t e q u a t i o n ) .
D e n e t h e e e c t o f a m o n a d m o r p h i s m o n q u a l i e r s a s f o l l o w s :
h ( ) = ;
h ( x u ) = x ( h u ) ;
h ( p ; q ) = ( h p ) ; ( h q )
I t f o l l o w s t h a t i f h i s a m o n a d m o r p h i s m f r o m M t o N t h e n
( 1 1 ) h t q
M
= t ( h q )
N
f o r a l l t e r m s t a n d q u a l i e r s q . T h e p r o o f i s a s i m p l e i n d u c t i o n o n t h e f o r m o f q u a l i e r s .
A s a n e x a m p l e , i t i s e a s y t o c h e c k t h a t u n i t
M
: : x ! M x i s a m o n a d m o r p h i s m f r o m
I d t o M . I t f o l l o w s t h a t
t x u
I d M
= t x u
M M
T h i s e x p l a i n s a t r i c k o c c a s i o n a l l y u s e d b y f u n c t i o n a l p r o g r a m m e r s , w h e r e o n e w r i t e s t h e
q u a l i e r x u ] i n s i d e a l i s t c o m p r e h e n s i o n t o b i n d x t o t h e v a l u e o f u , t h a t i s , t o a c h i e v e
t h e s a m e e e c t a s t h e q u a l i e r x u i n a n I d c o m p r e h e n s i o n .
A s a s e c o n d e x a m p l e , t h e f u n c t i o n r o f r o m S e c t i o n 4 . 5 i s a m o n a d m o r p h i s m f r o m S R
t o S T . T h i s c a n b e u s e d t o p r o v e t h e e q u i v a l e n c e o f t h e t w o i n t e r p r e t e r s i n F i g u r e s 5
a n d 6 . W r i t e e x p
S T
: : E x p ! S T V a l a n d e x p
S R
: : E x p ! S R V a l f o r t h e v e r s i o n s i n t h e
t w o g u r e s . T h e e q u i v a l e n c e o f t h e t w o v e r s i o n s i s c l e a r i f w e c a n s h o w t h a t
r o e x p
S R
= e x p
S T
1 9
-
8/3/2019 Comprehending Monads
20/38
T h e p r o o f i s a s i m p l e i n d u c t i o n o n t h e s t r u c t u r e o f e x p r e s s i o n s . I f t h e e x p r e s s i o n h a s t h e
f o r m ( P l u s e
1
e
2
) , w e h a v e t h a t
r o ( e x p
S R
( P l u s e
1
e
2
) )
= f u n f o l d i n g e x p
S R
g
r o v
1
+ v
2
v
1
e x p
S R
e
1
; v
2
e x p
S R
e
2
S R
= f b y ( 1 1 ) g
v
1
+ v
2
v
1
r o ( e x p
S R
e
1
) ; v
2
r o ( e x p
S R
e
2
)
S T
= f h y p o t h e s i s g
v
1
+ v
2
v
1
e x p
S T
e
1
; v
2
e x p
S T
e
2
S T
= f f o l d i n g e x p
S T
g
e x p
S T
( P l u s e
1
e
2
)
T h e o t h e r t w o c a s e s a r e e q u a l l y s i m p l e .
A l l o f t h i s e x t e n d s s t r a i g h t f o r w a r d l y t o m o n a d s w i t h z e r o . I n t h i s c a s e w e a l s o r e q u i r e
t h a t h z e r o
M
= z e r o
N
, d e n e t h e a c t i o n o f a m o r p h i s m o n a l t e r b y h b = b , a n d o b s e r v e
t h a t ( 1 1 ) h o l d s e v e n w h e n q c o n t a i n s l t e r s .
7 M o r e m o n a d s
T h i s s e c t i o n d e s c r i b e s f o u r m o r e m o n a d s : p a r s e r s , e x p r e s s i o n s , i n p u t - o u t p u t , a n d c o n t i n -
u a t i o n s . T h e b a s i c t e c h n i q u e s a r e n o t n e w ( p a r s e r s a r e d i s c u s s e d i n W a d 8 5 , F a i 8 7 , F L 8 9 ] ,
a n d e x c e p t i o n s a r e d i s c u s s e d i n W a d 8 5 , S p i 9 0 ] ) , b u t m o n a d s a n d m o n a d c o m p r e h e n s i o n s
p r o v i d e a c o n v e n i e n t f r a m e w o r k f o r t h e i r e x p r e s s i o n .
7 . 1 P a r s e r s
T h e m o n a d o f p a r s e r s i s g i v e n b y
t y p e P a r s e x = S t r i n g ! L i s t ( x ; S t r i n g )
m a p
P a r s e
f x = i ! ( f x ; i
0
) ( x ; i
0
) x i
L i s t
u n i t
P a r s e
x = i ! ( x ; i )
L i s t
j o i n
P a r s e
x = i ! ( x ; i
0 0
) ( x ; i
0
) x i ; ( x ; i
0 0
) x i
0 L i s t
H e r e S t r i n g i s t h e t y p e o f l i s t s o f C h a r . T h u s , a p a r s e r a c c e p t s a n i n p u t s t r i n g a n d r e t u r n s
a l i s t o f p a i r s . T h e l i s t c o n t a i n s o n e p a i r f o r e a c h s u c c e s s f u l p a r s e , c o n s i s t i n g o f t h e v a l u e
p a r s e d a n d t h e r e m a i n i n g u n p a r s e d i n p u t . A n e m p t y l i s t d e n o t e s a f a i l u r e t o p a r s e t h e
i n p u t . W e h a v e t h a t
( x ; y ) x
x
; y
y
P a r s e
= i ! ( ( x ; y ) ; i
0 0
) ( x ; i
0
)
x
i ; ( y ; i
0 0
)
y
i
0 L i s t
T h i s a p p l i e s t h e r s t p a r s e r t o t h e i n p u t , b i n d s x t o t h e v a l u e p a r s e d , t h e n a p p l i e s t h e
s e c o n d p a r s e r t o t h e r e m a i n i n g i n p u t , b i n d s y t o t h e v a l u e p a r s e d , t h e n r e t u r n s t h e p a i r
( x ; y ) a s t h e v a l u e t o g e t h e r w i t h i n p u t y e t t o b e p a r s e d . I f e i t h e r x o r y f a i l s t o p a r s e i t s
i n p u t ( r e t u r n i n g a n e m p t y l i s t ) t h e n t h e c o m b i n e d p a r s e r w i l l f a i l a s w e l l .
2 0
-
8/3/2019 Comprehending Monads
21/38
T h e r e i s a l s o a s u i t a b l e z e r o f o r t h i s m o n a d , g i v e n b y
z e r o
P a r s e
y = i !
L i s t
T h u s , ]
P a r s e
i s t h e p a r s e r t h a t a l w a y s f a i l s t o p a r s e t h e i n p u t . I t f o l l o w s t h a t w e m a y u s e
l t e r s i n P a r s e - c o m p r e h e n s i o n s a s w e l l a s i n L i s t - c o m p r e h e n s i o n s .
T h e a l t e r n a t i o n o p e r a t o r c o m b i n e s t w o p a r s e r s :
( ] ) : : P a r s e x ! P a r s e x ! P a r s e x
x y = i ! ( x i ) + + ( y i )
( H e r e + + i s t h e o p e r a t o r t h a t c o n c a t e n a t e s t w o l i s t s . ) I t r e t u r n s a l l p a r s e s f o u n d b y t h e
r s t a r g u m e n t f o l l o w e d b y a l l p a r s e s f o u n d b y t h e s e c o n d .
T h e s i m p l e s t p a r s e r i s o n e t h a t p a r s e s a s i n g l e c h a r a c t e r :
n e x t : : P a r s e C h a r
n e x t = i ! ( h e a d i ; t a i l i ) n o t ( n u l l i )
L i s t
H e r e w e h a v e a L i s t - c o m p r e h e n s i o n w i t h a l t e r . T h e p a r s e r n e x t s u c c e e d s o n l y i f t h e
i n p u t i s n o n - e m p t y , i n w h i c h c a s e i t r e t u r n s t h e n e x t c h a r a c t e r . U s i n g t h i s , w e m a y d e n e
a p a r s e r t o r e c o g n i s e a l i t e r a l :
l i t : : C h a r ! P a r s e ( )
l i t c = ( ) c
0
n e x t ; c = = c
0 P a r s e
N o w w e h a v e a P a r s e - c o m p r e h e n s i o n w i t h a l t e r . T h e p a r s e r l i t c s u c c e e d s o n l y i f t h e
n e x t c h a r a c t e r i n t h e i n p u t i s c
A s a n e x a m p l e , a p a r s e r f o r f u l l y p a r e n t h e s i s e d l a m b d a t e r m s , y i e l d i n g v a l u e s o f t h e
t y p e T e r m d e s c r i b e d p r e v i o u s l y , c a n b e w r i t t e n a s f o l l o w s :
t e r m : : P a r s e T e r m
t e r m = V a r x x n a m e
P a r s e
L a m x t ( ) l i t ` ( ' ; ( ) l i t ' ; x n a m e ; ( ) l i t ! ' ;
t t e r m ; ( ) l i t ` ) ' ]
P a r s e
A p p t u ( ) l i t ` ( ' ; t t e r m ; u t e r m ; ( ) l i t ` ) ' ]
P a r s e
n a m e : : P a r s e N a m e
n a m e = c c n e x t ; ` a ' c ; c ` z ' ]
P a r s e
H e r e , f o r s i m p l i c i t y , i t h a s b e e n a s s u m e d t h a t n a m e s c o n s i s t o f a s i n g l e l o w e r - c a s e l e t t e r ,
s o N a m e = C h a r ; a n d t h a t a n d ! a r e b o t h c h a r a c t e r s .
7 . 2 E x c e p t i o n s
T h e t y p e M a y b e x c o n s i s t s o f e i t h e r a v a l u e o f t y p e x , w r i t t e n J u s t x , o r a n e x c e p t i o n a l
v a l u e , w r i t t e n N o t h i n g :
d a t a M a y b e x = J u s t x N o t h i n g
2 1
-
8/3/2019 Comprehending Monads
22/38
( T h e n a m e s a r e d u e t o S p i v e y S p i 9 0 ] . ) T h e f o l l o w i n g o p e r a t i o n s y i e l d a m o n a d :
m a p
M a y b e
f ( J u s t x ) = J u s t ( f x )
m a p
M a y b e
f N o t h i n g = N o t h i n g
u n i t
M a y b e
x = J u s t x
j o i n
M a y b e
( J u s t ( J u s t x ) ) = J u s t x
j o i n
M a y b e
( J u s t N o t h i n g ) = N o t h i n g
j o i n
M a y b e
N o t h i n g = N o t h i n g
W e h a v e t h a t
( x ; y ) x x ; y y
M a y b e
r e t u r n s J u s t ( x ; y ) i f x i s J u s t x a n d y i s J u s t y , a n d o t h e r w i s e r e t u r n s N o t h i n g
T h e r e i s a l s o a s u i t a b l e z e r o f o r t h i s m o n a d , g i v e n b y
z e r o
M a y b e
y = N o t h i n g
H e n c e ]
M a y b e
= N o t h i n g a n d x
M a y b e
= J u s t x . F o r e x a m p l e , x ? 1 x 1
M a y b e
r e t u r n s o n e l e s s t h a n x i f x i s p o s i t i v e , a n d N o t h i n g o t h e r w i s e .
T w o u s e f u l o p e r a t i o n s t e s t w h e t h e r a n a r g u m e n t c o r r e s p o n d s t o a v a l u e a n d , i f s o ,
r e t u r n t h a t v a l u e :
e x i s t s : : M a y b e x ! B o o l
e x i s t s ( J u s t x ) = T r u e
e x i s t s N o t h i n g = F a l s e
t h e : : M a y b e x ! x
t h e ( J u s t x ) = x
O b s e r v e t h a t
t h e x e x i s t s x
M a y b e
= x
f o r a l l x : : M a y b e x . I f w e a s s u m e t h a t ( t h e N o t h i n g ) = , i t i s e a s i l y c h e c k e d t h a t t h e i s
a m o n a d m o r p h i s m f r o m M a y b e t o S t r . W e h a v e t h a t
t h e x ? 1 x 1
M a y b e
= x ? 1 x 1
S t r
a s a n i m m e d i a t e c o n s e q u e n c e o f t h e m o n a d m o r p h i s m l a w . T h i s m a p p i n g e m b o d i e s t h e
c o m m o n s i m p l i c a t i o n o f c o n s i d e r i n g e r r o r v a l u e s a n d t o b e i d e n t i c a l .
T h e b i a s e d - c h o i c e o p e r a t o r c h o o s e s t h e r s t o f t w o p o s s i b l e v a l u e s t h a t i s w e l l d e n e d :
( ? ) : : M a y b e x ! M a y b e x ! M a y b e x
x ? y = i f e x i s t s x t h e n x e l s e y
T h e ? o p e r a t i o n i s a s s o c i a t i v e a n d h a s N o t h i n g a s a u n i t . I t a p p e a r e d i n e a r l y v e r s i o n s
o f M L G M W 7 9 ] , a n d s i m i l a r o p e r a t o r s a p p e a r i n o t h e r l a n g u a g e s . A s a n e x a m p l e o f i t s
u s e , t h e t e r m
t h e ( x ? 1 x 1
M a y b e
? 0
M a y b e
)
2 2
-
8/3/2019 Comprehending Monads
23/38
r e t u r n s t h e p r e d e c e s s o r o f x i f i t i s n o n - n e g a t i v e , a n d z e r o o t h e r w i s e .
I n W a d 8 5 ] i t w a s p r o p o s e d t o u s e l i s t s t o r e p r e s e n t e x c e p t i o n s , e n c o d i n g a v a l u e x b y
t h e u n i t l i s t , a n d a n e x c e p t i o n b y t h e e m p t y l i s t . T h i s c o r r e s p o n d s t o t h e m a p p i n g
l i s t : : M a y b e x ! L i s t x
l i s t ( J u s t x ) = x
L i s t
l i s t N o t h i n g =
L i s t
w h i c h i s a m o n a d m o r p h i s m f r o m M a y b e t o L i s t . W e h a v e t h a t
l i s t ( x ? y ) ( l i s t x ) + + ( l i s t y ) ;
w h e r e i s t h e s u b l i s t r e l a t i o n . T h u s , e x c e p t i o n c o m p r e h e n s i o n s c a n b e r e p r e s e n t e d b y l i s t
c o m p r e h e n s i o n s , a n d b i a s e d c h o i c e c a n b e r e p r e s e n t e d b y l i s t c o n c a t e n a t i o n . T h e a r g u -
m e n t i n W a d 8 5 ] t h a t l i s t c o m p r e h e n s i o n s p r o v i d e a c o n v e n i e n t n o t a t i o n f o r m a n i p u l a t i n g
e x c e p t i o n s c a n b e m a p p e d , v i a t h i s m o r p h i s m , i n t o a n a r g u m e n t i n f a v o u r o f e x c e p t i o n
c o m p r e h e n s i o n s !
7 . 3 I n p u t a n d o u t p u t
F i x t h e i n p u t a n d o u t p u t o f a p r o g r a m t o b e s t r i n g s ( e . g . , t h e i n p u t i s a s e q u e n c e o f
c h a r a c t e r s f r o m a k e y b o a r d , a n d t h e o u t p u t i s a s e q u e n c e o f c h a r a c t e r s t o a p p e a r o n a
s c r e e n ) . T h e i n p u t a n d o u t p u t m o n a d s a r e g i v e n b y :
t y p e I n x = S t r i n g ! ( x ; S t r i n g )
t y p e O u t x = ( x ; S t r i n g ! S t r i n g )
T h e i n p u t m o n a d i s a f u n c t i o n f r o m a s t r i n g ( t h e i n p u t t o t h e p r o g r a m ) a n d t o a p a i r o f
a v a l u e a n d a s t r i n g ( t h e i n p u t t o t h e r e s t o f t h e p r o g r a m ) . T h e o u t p u t m o n a d i s a p a i r
o f a v a l u e a n d a f u n c t i o n f r o m a s t r i n g ( t h e o u t p u t o f t h e r e s t o f t h e p r o g r a m ) t o a s t r i n g
( t h e o u t p u t o f t h e p r o g r a m ) .
T h e i n p u t m o n a d i s i d e n t i c a l t o t h e m o n a d o f s t a t e t r a n s f o r m e r s , x i n g t h e s t a t e t o
b e a s t r i n g ; a n d t h e o p e r a t i o n s m a p , u n i t , a n d j o i n a r e i d e n t i c a l t o t h o s e i n t h e s t a t e -
t r a n s f o r m e r m o n a d . T w o u s e f u l o p e r a t i o n s i n t h e i n p u t m o n a d a r e
e o f : : I n B o o l
e o f = i ! ( n u l l i ; i )
r e a d : : I n C h a r
r e a d = i ! ( h e a d i ; t a i l i )
T h e r s t r e t u r n s t r u e i f t h e r e i s m o r e i n p u t t o b e r e a d , t h e s e c o n d r e a d s t h e n e x t i n p u t
c h a r a c t e r .
T h e o u t p u t m o n a d i s g i v e n b y
m a p
O u t
f
b
x = ( f x ; o t ) ( x ; o t )
b
x
I d
u n i t
O u t
x = ( x ; o ! o )
j o i n
O u t
b
b
x = ( x ; o t o t
0
) (
b
x ; o t )
b
b
x ; ( x ; o t
0
)
b
x
I d
2 3
-
8/3/2019 Comprehending Monads
24/38
T h e s e c o n d c o m p o n e n t o f t h e p a i r i s a n o u t p u t t r a n s f o r m e r , w h i c h g i v e n t h e o u t p u t o f
t h e r e s t o f t h e p r o g r a m p r o d u c e s t h e o u t p u t o f t h i s p a r t . T h e u n i t p r o d u c e s n o o u t p u t o f
i t s o w n , s o i t s o u t p u t t r a n s f o r m e r i s t h e i d e n t i t y f u n c t i o n . T h e j o i n o p e r a t i o n c o m p o s e s
t w o o u t p u t t r a n s f o r m e r s . A u s e f u l o p e r a t i o n i n t h e o u t p u t m o n a d i s
w r i t e : : C h a r ! O u t ( )
w r i t e c = ( ( ) ; o ! c : o )
T h i s a d d s t h e c h a r a c t e r t o b e w r i t t e n o n t o t h e h e a d o f t h e o u t p u t l i s t .
A l t e r n a t i v e d e n i t i o n s o f t h e o u t p u t m o n a d a r e p o s s i b l e , b u t t h e s e d o n o t b e h a v e a s
w e l l a s t h e f o r m u l a t i o n g i v e n a b o v e . O n e a l t e r n a t i v e t r e a t s o u t p u t a s a s t a t e t r a n s f o r m e r ,
t y p e O u t
0
x = S t r i n g ! ( x ; S t r i n g ) ;
t a k i n g m a p , u n i t , a n d j o i n a s i n t h e s t a t e t r a n s f o r m e r m o n a d . T h e w r i t e o p e r a t i o n i s
n o w
w r i t e : : C h a r ! O u t
0
( )
w r i t e c = o ! ( ( ) ; c : o )
T h i s f o r m u l a t i o n i s n o t s o g o o d , b e c a u s e i t i s t o o s t r i c t : o u t p u t w i l l n o t a p p e a r u n t i l t h e
p r o g r a m t e r m i n a t e s . A n o t h e r a l t e r n a t i v e i s
t y p e O u t
0 0
x = ( x ; S t r i n g )
m a p
O u t
f
b
x = ( f x ; o ) ( x ; o )
b
x
I d
u n i t
O u t
x = ( x