On Sat, Jun 23, 2012 at 12:22 PM, Anton Kholomiov <anton.kholomiov@gmail.com> wrote:
Why this function doesn't compile?

phi :: Monad m => StateT s m ()
phi = lift $ return ()

I get (ghc-7.4.1)

    Could not deduce (MonadTrans (StateT s))
      arising from a use of `lift'
    from the context (Monad m)

This means exactly what it says:  you have stated that m must be a Monad, but you didn't say anything about whether it's a MonadTrans, so you can't use "lift".  The correct signature would be

    phi :: (Monad m, MonadTrans m) => StateT s m ()

--
brandon s allbery                                      allbery.b@gmail.com
wandering unix systems administrator (available)     (412) 475-9364 vm/sms