
There is none. No type can be an instance of both classes, as their signatures are too different. You can create your own type class instead of MonadTrans (or Bifunctor), or you can wrap T in a newtype, swapping arguments.
On 01 May 2015, at 21:32, Alexey Uimanov
wrote: This question probably asked already.
I have a type
data T m b a = T (m (b, a))
and it should be instance of `Bifunctor` and `MonadTrans` same time. But there is a problem:
instance Bifunctor (T m)
is ok, but
instance MonadTrans (T ...
is not, because first argument is `m` but we need `b`. Type can be rewritten like
data T b m a = T (m (b, a))
and instance of MonadTrans is ok:
instance MonadTrans (T b)
but how to define Bifunctor?
instance Bifunctor (T ...
I did not found how to workaround this. Is there any type magic for such cases? _______________________________________________ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://mail.haskell.org/cgi-bin/mailman/listinfo/haskell-cafe