Hi all,<div><br class="webkit-block-placeholder"></div><div>I have encoded a type family such that:</div><div><br class="webkit-block-placeholder"></div><div>type family F a :: * -&gt; *</div><div><br class="webkit-block-placeholder">
</div><div>and a function (I know it is complicated, but I think the problem is self explanatory):</div><div><br class="webkit-block-placeholder"></div><div><div><span class="Apple-style-span" style="font-style: italic;">hyloPara :: (Functor (F a), Functor (F d), F d a ~ F a (a,a), F d c ~ F a (c,a)) =&gt; d -&gt; (<span class="Apple-style-span" style="color: rgb(255, 0, 0);">F d c</span> -&gt; c) -&gt; (a -&gt; F d a) -&gt; a -&gt; c</span></div>
<div><span class="Apple-style-span" style="font-style: italic;">hyloPara d g h = g . fmap (hyloPara d g h) . h</span></div><div><br></div><div>it all works fine.</div><div><br class="webkit-block-placeholder"></div><div>However, if I change the declaration to (changed F d c for the &quot;supposedly&nbsp;equivalent&quot; F a (c,a)):</div>
<div><br class="webkit-block-placeholder"></div><div><span class="Apple-style-span" style="font-style: italic;">hyloPara :: (Functor (F a), Functor (F d), F d a ~ F a (a,a), F d c ~ F a (c,a)) =&gt; d -&gt; (<span class="Apple-style-span" style="color: rgb(255, 0, 0);">F a (c,a)</span> -&gt; c) -&gt; (a -&gt; F d a) -&gt; a -&gt; c</span><br class="webkit-block-placeholder">
</div></div><div><div><br class="webkit-block-placeholder"></div><div>and I get</div><div><br class="webkit-block-placeholder"></div><div><div>&nbsp;&nbsp; &nbsp;<span class="Apple-style-span" style="font-style: italic;">Occurs check: cannot construct the infinite type: c = (c, a)</span></div>
<div><span class="Apple-style-span" style="font-style: italic;">&nbsp;&nbsp; &nbsp;When generalising the type(s) for `hyloPara&#39;</span></div><div><span class="Apple-style-span" style="font-style: italic;"><br class="webkit-block-placeholder">
</span></div><div>This really messes up my notions on equality constraints, is it the expected behavior? It would be essential for me to provide this definition.</div><div><br class="webkit-block-placeholder"></div><div>Thanks,</div>
<div>hugo</div><div><br class="webkit-block-placeholder"></div></div></div>