[Haskell-cafe] Teaching Monads
dan.doel at gmail.com
Sat Jun 7 09:49:45 EDT 2008
On Saturday 07 June 2008, Ronald Guida wrote:
> 3. These closures are extremely similar to the closures that arise
> when desugaring let-syntax.
> let x1 = f1 in f1 -$ (\x1 -> Where:
> let x2 = f2 in f2 -$ (\x2 -> (-$) :: a -> (a -> b) -> b
> let x3 = f3 in f3 -$ (\x3 -> x -$ f = f x
> f x1 x2 x3 f x1 x2 x3)))
In fact, this is the identity monad (this is not valid Haskell, but we'll let
type Id a = a
instance Monad Id where
return a = a
a >>= f = f a
do x1 <- f1 f1 >>= \x1 (\x1 ->
x2 <- f2 f2 >>= \x2 (\x2 ->
x3 <- f3 f3 >>= \x3 (\x3 -> f x1 x2 x3) f3)
return (f x1 x2 x3) return (f x1 x2 x3) f2) f1
Which is the same as the lets modulo let-polymorphism and recursive bindings.
(In Haskell, you need a newtype wrapper but it's otherwise the same.)
> OK, so before I attempt to write a monad tutorial based on "manual
> plumbing" and "monadic plumbing", I would like to know, does anyone
> else think this is a good idea?
I think the general consensus is "don't write yet more monad tutorials." If
you think Wadler's original paper is good, then it doesn't hurt to recommend
it (you could instead write a "don't be afraid of reading academic papers"
But don't let me stop you, of course. :)
More information about the Haskell-Cafe