*Main> eval exp1 Just 7 *Main> eval exp2 Nothing *Main> eval exp1 Just 7 *Main> eval' exp1 Just 7 *Main> eval' exp2 Nothing *Main> :t (>>=) (>>=) :: Monad m => m a -> (a -> m b) -> m b *Main> :r [1 of 1] Compiling Main ( lec10.hs, interpreted ) Ok, one module loaded. *Main> eval'' exp2 Nothing *Main> eval'' exp1 Just 7 *Main> zip''' [1, 2,3] "abcd" [(1,'a'),(1,'b'),(1,'c'),(1,'d'),(2,'a'),(2,'b'),(2,'c'),(2,'d'),(3,'a'),(3,'b'),(3,'c'),(3,'d')] *Main> :r [1 of 1] Compiling Main ( lec10.hs, interpreted ) Ok, one module loaded. *Main> pairing'' [1, 2,3] "abcd" [(1,'a'),(1,'b'),(1,'c'),(1,'d'),(2,'a'),(2,'b'),(2,'c'),(2,'d'),(3,'a'),(3,'b'),(3,'c'),(3,'d')] *Main> pairing''' [] "abcd" [] *Main> pairing''' "abcd" [] [] *Main> :t (1, []) (1, []) :: Num a1 => (a1, [a2]) *Main>