Comprehending Monads

download Comprehending Monads

of 38

Transcript of Comprehending Monads

  • 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