On Sun, Jun 28, 2009 at 12:41 AM, Henry Laxen<nadine.and.he...@pobox.com> wrote: > Dear Group, > > If any of you are struggling with understanding monads, I've tried to put > together a pretty through explanation of what is behind the Reader monad. If > you're interested, have a look at: > > http://www.maztravel.com/haskell/readerMonad.html >
Nice post. I didn't find how to add comments on your blog, so I post them here: >Areas of Confusion > > 1. What is the relationship between the Reader on the left hand side of the > equals sign in the newtype definition and the Reader on the right hand side? > 2. Why is there a Record field on the right hand side? > 3. What is that r -> a doing there? 1) Reader on the left hand side be called a type constructor, Reader on the right hand side be called a data constructor, in Haskell 98 Report. You call them type definition and instance constructor, respectively, I'm not sure it's a good idea, or it is right. bug in the explanation: what you use to make something and instance of a Reader (left hand side) -> what you use to make something an instance of a Reader (left hand side) 2) runReader be called a selector function in Haskell 98 Report. 3) (->) is a type constructor, so r -> a is a function type. I used found 'instance Monad ((->) r)' hard to understand, but by follow the hit given by Brent Yorgey, i.e. the data constructor for type constructor (->) is called lambda abstraction, I found I can understand them by type inference. I have written a post about how I figure it out, maybe you want take a look: http://leeduhem.wordpress.com/2009/06/07/understanding-monad-instance-by-type-inference/ bug in the explanation after (Reader f1) >>= f2 = Reader $ \e -> runReader (Reader b) e: Reader b is a function that takes and e and returns a c, -> Reader b is a function that takes an e and returns a c, lee _______________________________________________ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe