[Haskell-cafe] A Reader Monad Tutorial
lee.duhem at gmail.com
Sun Jun 28 03:00:46 EDT 2009
On Sun, Jun 28, 2009 at 12:41 AM, Henry Laxen<nadine.and.henry at 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:
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
it out, maybe you want take a look:
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,
More information about the Haskell-Cafe