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