Perspectives on learning and using Haskell

Graham Klyne gk at
Wed Dec 24 10:39:33 EST 2003

[switching to Haskell-cafe]

At 19:37 23/12/03 +0100, Tomasz Zielonka wrote:
>On Tue, Dec 23, 2003 at 05:26:20PM +0000, Graham Klyne wrote:
> > [1]
>Thanks, that was a nice reading :)


(If by any chance there's anything here that might be useful for the Wiki, 
anyone may feel free to plunder it.)

>I have some comments:
>8. Your explanation of Functor excludes many useful Functors which are
>    rather not collections. For example, every monad (like IO) can
>    be a Functor if you take fmap = Monad.liftM.
>    For [] and Maybe this would give the same operation as in their
>    normal instances.

That's an interesting perspective that I wasn't aware of... I need to think 
about that.  Meanwhile, I've added your observation to my notes.


It now seems to me that (some?) Monads are kinds of Functors, generalized 
to handle the "no value" case, and also composition.

This also had me thinking about sequence:  is there a generalization to 
arbitrary monads that rearranges the monadic structure?

>11 and 18.
>    If you define an instance of Monad for ((->) e) then
>       return (putStrLn "Hello!") 'x'
>    is a proper IO () value. Probably still not sensible ;)

Ah, I think I see your point.  It would apply where monads are "nested", right?

>    Special treatment of 'return' could be helpful, but I am afraid that
>    it could also make it look special, like a return keyword in C.

I certainly wouldn't argue for special treatment _in the language_, but 
OTOH, I think it might be helpful if compiler diagnostics hinted at the 
possibility when a type error is detected in a form like return x y.


Graham Klyne
For email:

More information about the Haskell-Cafe mailing list