Wed Feb 10 19:13:48 CET 2010

Monads and the incredible uselessness of intuition

Yes, a monad is a TYPE constructor, not a value constructor.  I.e. it
is a parameterized type, not necessarily a flat data structure that
can be instantiated by calling "M x".

I'm severely lacking in intuition here.  Maybe it's time to do some
more standard exercises.

It's mostly about this error message:

    Kind mis-match
    Expected kind `* -> *', but `Contstate' has kind `*'
    In the instance declaration for `Monad Contstate'
Failed, modules loaded: none.

Monad apparently requires a type constructor with two arguments. (wording?)

No, check this[1]

A 0-param type constructor has kind `*'
A 1-param type constructor has kind `* -> *'

[1] http://en.wikibooks.org/wiki/Haskell/Kinds