
On Tue, Jan 27, 2009 at 3:17 PM, Matthijs Kooijman
Hi Cristiano,
Mmmmhhh... this seems the signature of the liftM function, whose purpose is to make a function operate on monadic values instead of pure values. Notice that this is different from the "lift" function you described above. A computation is a monadic value (i.e. an object of the type "Monad m => m a") and the "lift" function wraps that value into a monad transformer, making it a new monadic value (i.e. an object of the type "MonadTrans t, Monad m => t m a"). Thanks for clarifying. I don't have my terminology straight yet I guess :-)
I hate saying this, as I felt so frustrated when people told me so in the past, but monads and monad transformers are not as difficult as they appear. I advise you to read (and eventually buy) the "Real World Haskell" book instead: I think it's a far superior introduction. Cristiano