<div dir="ltr">This question probably asked already. <div><br></div><div>I have a type </div><div><br></div><div><font face="monospace, monospace">data T m b a = T (m (b, a))</font></div><div><br></div><div>and it should be instance of `Bifunctor` and `MonadTrans` same time. But there is a problem: </div><div><br></div><div><font face="monospace, monospace">instance Bifunctor (T m) </font></div><div><br></div><div>is ok, but </div><div><br></div><div><font face="monospace, monospace">instance MonadTrans (T ...</font></div><div><br></div><div>is not, because first argument is `m` but we need `b`. Type can be rewritten like </div><div><br></div><div><font face="monospace, monospace">data T b m a = T (m (b, a))</font></div><div><br></div><div>and instance of MonadTrans is ok: </div><div><br></div><div><font face="monospace, monospace">instance MonadTrans (T b)</font></div><div><br></div><div>but how to define Bifunctor? </div><div><br></div><div><font face="monospace, monospace">instance Bifunctor (T ...</font></div><div><font face="arial, helvetica, sans-serif"><br></font></div><div><font face="arial, helvetica, sans-serif">I did not found how to workaround this. Is there any type magic for such cases?</font></div></div>