On Thu, 2009-05-07 at 16:45 -0700, Daryoush Mehrtash wrote:
> In the  Is currying monadic? post the author says:
> 
>         This is again a nested expression. So I wondered if you could
>         again "flatten" it with a monadic do block: 
>         let add3 = do
>                 a <- get first parameter
>                 b <- get second parameter
>                 c <- get third parameter
>         
>                 return a+b+c
>         OK, so I "know" that functions in Haskell (which uses currying
>         for functions as a general rule) are the "Reader monad". But I
>         don't understand it well enough to know if that means you can
>         use Reader to implement the above... 
>         
>         (I don't understand Reader at all in fact. I must bang my head
>         against it again, but I find it very confusing - how the monad
>         is represented, what the functions are, and how they get
>         magically applied.) 
>         
>         
> 
> 
> Any idea what he is talking about?

A function of a single argument can be represented as a Reader monad,
but Reader doesn't really do the currying action. It provides "ask"
which is essentially "get first parameter". For multiple parameters,
you'd be nesting Readers.

If he's asking for a "get next parameter" operation, then you need to
track the concept of "next", which implies some sort of state or
indexing. An indexed monad in particular is highly appropriate for the
"currying monad", as what he's asking for is essentially a session type.

> Thanks
> 
> Daryoush

--
-Julian Blake Kongslie 
If this is a mailing list, please CC me on replies.

vim: set ft=text :

Attachment: signature.asc
Description: This is a digitally signed message part

_______________________________________________
Haskell-Cafe mailing list
[email protected]
http://www.haskell.org/mailman/listinfo/haskell-cafe

Reply via email to