<div dir="ltr">I updated the proposal with (again more information in <a href="https://ghc.haskell.org/trac/ghc/ticket/13026#comment:5">https://ghc.haskell.org/trac/ghc/ticket/13026#comment:5</a>)<br><pre><span class="gmail-nf">runSum</span> <span class="gmail-ow">::</span> <span class="gmail-kt">Sum</span> f g a <span class="gmail-ow">-></span> <span class="gmail-kt">Either</span> <span class="gmail-p">(</span>f a<span class="gmail-p">)</span> <span class="gmail-p">(</span>g a<span class="gmail-p">)</span>
<span class="gmail-nf">runSum</span> <span class="gmail-ow">=</span> <span class="gmail-kt">Left</span> <span class="gmail-o">||||</span> <span class="gmail-kt">Right</span>
<span class="gmail-nf">runProduct</span> <span class="gmail-ow">::</span> <span class="gmail-kt">Product</span> f g a <span class="gmail-ow">-></span> <span class="gmail-p">(</span>f a<span class="gmail-p">,</span> g a<span class="gmail-p">)</span>
<span class="gmail-nf">runProduct</span> <span class="gmail-p">(</span><span class="gmail-kt">Pair</span> fa ga<span class="gmail-p">)</span> <span class="gmail-ow">=</span> <span class="gmail-p">(</span>fa<span class="gmail-p">,</span> ga<span class="gmail-p">)<br><br>I found one for ‘Data.Functor.Compose’<br><br></span><span class="gmail-nf">o</span> <span class="gmail-ow">::</span> <span class="gmail-p"></span><span class="gmail-kt">Functor</span> m <span class="gmail-ow">=></span> <span class="gmail-p">(</span>b <span class="gmail-ow">-></span> n c<span class="gmail-p">)</span> <span class="gmail-ow">-></span> <span class="gmail-p">(</span>a <span class="gmail-ow">-></span> m b<span class="gmail-p">)</span> <span class="gmail-ow">-></span> <span class="gmail-p">(</span>a <span class="gmail-ow">-></span> <span class="gmail-kt">Compose</span> m n c<span class="gmail-p">)</span>
<span class="gmail-nf">o</span> f g <span class="gmail-ow">=</span> <span class="gmail-kt">Compose</span> <span class="gmail-o">.</span> fmap f <span class="gmail-o">.</span> g</pre></div>