Also, maybe the lifting operation could be plift :: (PMonad m) => m s1 s2 a -> t m s1 s2 s s a
where s1 and s2 are passed to the underlying type constructor. That way, the kind of m would be * -> * -> * -> * and the kind of t would be (* -> * -> * -> *) -> * -> * -> * -> * -> * -> * so we see how if we apply the first three types we get * -> * -> * -> *, which is the kind of m. Just thinking out loud basically :] Cheerio! - BONUS _______________________________________________ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe