BTW, here&#39;s a non-contrived example.&nbsp; It&#39;s pretty easy to come up with examples when you try to use type classes instead of a proper module system.<br><br>Here we have expressions parametrized over how identifiers and literals are represented.&nbsp; First a simple instance, and then one where all the types are parametrized over the string representation.&nbsp; These are the plug-and-play type of things I&#39;d like to be able to do.<br>
<br>class IsExpr expr id lit | expr -&gt; id lit where<br>&nbsp;&nbsp;&nbsp; eId :: id -&gt; expr<br>&nbsp;&nbsp;&nbsp; eLit :: lit -&gt; expr<br>&nbsp;&nbsp;&nbsp; eApply :: expr -&gt; expr -&gt; expr<br><br>data SimpleExpr = SId Char | SLit Int | SApply SimpleExpr SimpleExpr<br>
<br>instance IsExpr SimpleExpr Char Int where<br>&nbsp;&nbsp;&nbsp; eId = SId<br>&nbsp;&nbsp;&nbsp; eLit = SLit<br>&nbsp;&nbsp;&nbsp; eApply = SApply<br><br>data FancyExpr str = FId (Id str) | FLit (Lit str) | FApply (FancyExpr str) (FancyExpr str)<br><br>data Id str = Id str<br>
data Lit str = LString str | LInt Int<br><br>instance IsExpr (FancyExpr str) (Id str) (Lit str) where<br>&nbsp;&nbsp;&nbsp; eId = FId<br>&nbsp;&nbsp;&nbsp; eLit = FLit<br>&nbsp;&nbsp;&nbsp; eApply = FApply<br><br><br><div class="gmail_quote">On Fri, Apr 18, 2008 at 9:26 AM, Martin Sulzmann &lt;<a href="mailto:martin.sulzmann@gmail.com">martin.sulzmann@gmail.com</a>&gt; wrote:<br>
<blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;"><div class="Ih2E3d">Lennart Augustsson wrote:<br>
<blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); padding-left: 1ex;">
To reuse a favorite word, I think that any implementation that distinguishes &#39;a -&gt; b, a -&gt; c&#39; from &#39;a -&gt; b c&#39; is broken. :)<br>
It does not implement FD, but something else. &nbsp;Maybe this something else is useful, but if one of the forms is strictly more powerful than the other then I don&#39;t see why you would ever want the less powerful one.<br>

<br>
</blockquote></div>
Do you have any good examples, besides the contrived one<div class="Ih2E3d"><br>
<br>
class D a b c | a -&gt; b c<br>
<br></div>
instance D a b b =&gt; D [a] [b] [b]<br>
<br>
where we want to have the more powerful form of multi-range FDs?<br>
<br>
Fixing the problem who mention is easy. After all, we know how to derive<br>
improvement for multi-range FDs. But it seems harder to find agreement whether<br>
multi-range FDs are short-hands for single-range FDs, or<br>
certain single-range FDs, eg a -&gt; b and a -&gt; c, are shorthands for more powerful<br>
multi-range FDs a -&gt; b c.<br>
I clearly prefer the latter, ie have a more powerful form of FDs.<br><font color="#888888">
<br>
Martin<br>
<br>
</font></blockquote></div><br>