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 :
signature.asc
Description: This is a digitally signed message part
___
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe