Oh, yeah. Thanks, Sjoerd.<br><br>I wonder if there&#39;s some way not to require Monad. Some sort of ApplicativeFix instead. Hm.<br><br>-- Conal<br><br><div class="gmail_quote">On Wed, Jun 6, 2012 at 2:43 PM, Sjoerd Visscher <span dir="ltr">&lt;<a href="mailto:sjoerd@w3future.com" target="_blank">sjoerd@w3future.com</a>&gt;</span> wrote:<br>

<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">If there would be a package where this could be in it would be contravariant[1], but it isn&#39;t.<br>
<div class="im"><br>
&gt; &gt; newtype Q&#39; p f a = Q&#39; (p a -&gt; f a)<br>
<br>
</div>This compiles:<br>
<br>
&gt; instance (Contravariant p, Functor m, MonadFix m) =&gt; Applicative (Q&#39; p m) where<br>
&gt;   pure a = Q&#39; (pure (return a))<br>
&gt;   Q&#39; fs &lt;*&gt; Q&#39; as = Q&#39; $ \r -&gt; do<br>
&gt;     rec<br>
&gt;       f &lt;- fs (contramap ($ a) r)<br>
&gt;       a &lt;- as (contramap (f $) r)<br>
&gt;     return $ f a<br>
<br>
[1] <a href="http://hackage.haskell.org/package/contravariant" target="_blank">http://hackage.haskell.org/package/contravariant</a><br>
<br>
--<br>
Sjoerd Visscher<br>
<a href="https://github.com/sjoerdvisscher/blog" target="_blank">https://github.com/sjoerdvisscher/blog</a><br>
<br>
<br>
<br>
<br>
<br>
</blockquote></div><br>