On Dec 21, 2007 2:38 PM, Jules Bean &lt;<a href="mailto:jules@jellybean.co.uk">jules@jellybean.co.uk</a>&gt; wrote:<br><div class="gmail_quote"><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">David Menendez wrote:<br>&gt;&gt; That&#39;s a reasonable thing to assume. It just happens that Haskell<br>&gt; doesn&#39;t work that way. There&#39;s an asymmetry between constructing and<br>&gt; pattern-matching, and it&#39;s one that many people have complained about.
<br><br></div>With GADTs turned on (-XGADTS in 6.8, -fglasgow-exts in 6.6) pattern<br>matchings will give rise to class contexts as you would naively expect.<br><br>Contexts on constructors aren&#39;t actualy haskell98, it is a bug that GHC
<br>6.6 accepts them without any extensions being activated. Or that&#39;s my<br>understanding, see <a href="http://hackage.haskell.org/trac/ghc/ticket/1901" target="_blank">http://hackage.haskell.org/trac/ghc/ticket/1901
</a><font color="#888888"></font></blockquote><div><br>I think I saw [1] and just mentally substituted [2]. In fact, until just now I didn&#39;t know [1] was even possible. (Wasn&#39;t there some problem with class contexts in GADTs?)
<br><br>[1] data SquareType a = (Num a) =&gt; SquareConstructor a<br>[2] data (Num a) =&gt; SquareType a = SquareConstructor a<br><br>Okay, so pattern-matching in case [1] does guarantee Num a. In that case, the original code didn&#39;t work because it was trying to unify Int with an arbitrary instance of Num.
<br></div></div><br>-- <br>Dave Menendez &lt;<a href="mailto:dave@zednenem.com">dave@zednenem.com</a>&gt;<br>&lt;<a href="http://www.eyrie.org/~zednenem/">http://www.eyrie.org/~zednenem/</a>&gt;