title: Is it possible to change the monad type in a monadic sequence?
body: <p>I know it's possible to change the wrapped type, so that you can have</p>
  
  <pre><code>f :: (a -&gt; m b)
  g :: (b -&gt; m c)
  f &gt;&gt;= g :: (a -&gt; m c)
  </code></pre>
  
  <p>but is it possible to change <code>m</code>? If <code>m</code> is a <code>MonadError</code> and is implemented both by an <code>Either ErrorA</code> and <code>Either ErrorB</code>, can i somehow chain them? Obviously I can't chain them directly, because what would be the type of <code>Left</code>? However, I'm in a situation where I end up calling <code>show</code> in either case, but I haven't found a better solution than</p>
  
  <pre><code>case mightFail1 of
    Left e -&gt; show e
    Right v -&gt; either show doStuff mightFail2
  </code></pre>
  
  <p>which fails to properly use the monadic behavior of stopping at the first error without me having to check explicitly.</p>