And this works, and I don't know why:

mostly because you have pushed more possible conflicts till later - you could also have added Monad b, Monad (t b) to the context for the second instance in your previous version; shifting the constraints from the class to the method delays the point at which
they are checked (definition vs use).

if the Monad instances are really missing when you try to use that method, it 
will be
picked up later; also, there is a potential instance overlap, as the more eager Hugs will tell you for the definitions, while GHC will also report that later, only if it occurs in use.

claus


class MonadTrans' i o where
   lift' :: (Monad i, Monad o) => i a -> o a

instance Monad m => MonadTrans' m m where
   lift' = id

instance (MonadTrans t, Monad b, MonadTrans' a b) => MonadTrans' a (t b) where
   lift' = lift . lift'

Help?

_______________________________________________
Haskell mailing list
[email protected]
http://www.haskell.org/mailman/listinfo/haskell

Reply via email to