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