
Hi all, In order to improve my understanding of monad, I am trying to do some manual computation on "Reader Monad" but I got some problem. The computation is like this: --instance Monad (Reader e) where -- return a = Reader $ \e -> a -- (Reader r) >>= f = Reader $ \e -> f (r e) e runReader (do { b <- Reader $ show; return b } ) -- This is the initial expression, it should equals "show" runReader (Reader $ show >>= \b -> return b) -- remove do notion runReader (Reader $ \e -> return( show e ) e) -- apply the definition of ">>=" runReader (Reader $ \e -> (Reader $ \e1 -> show(e)) e) -- apply the definition of "return" But the last expression is incorrect, and I don't know how to go on. Could anyone explain this for me? Thanks in advance! Reference : http://www.haskell.org/all_about_monads/html/readermonad.html