Then you can write <span style="font-family: courier new,monospace;">fromInt 1 :: Zero</span>, and it will type check.<br><br>/J<br><br><div class="gmail_quote">On 19 November 2010 04:42, Bastian Erdnüß <span dir="ltr">&lt;<a href="mailto:earthnut@web.de">earthnut@web.de</a>&gt;</span> wrote:<br>
<blockquote class="gmail_quote" style="margin: 0pt 0pt 0pt 0.8ex; border-left: 1px solid rgb(204, 204, 204); padding-left: 1ex;"><div class="im"><br>
On Nov 19, 2010, at 1:07, Daniel Peebles wrote:<br>
<br>
&gt; The best you can do with fromInt is something like Int -&gt; (forall n. (Nat n)<br>
&gt; =&gt; n -&gt; r) -&gt; r, since the type isn&#39;t known at compile time.<br>
<br>
</div>Or you put it in the type class as fromInt :: Int -&gt; n and do in Zero: fromInt _ = Zero and in the other: fromInt _ = Succ $ fromInt (undefined :: n).  Shouldn&#39;t that work, too?<br>
<div><div></div><div class="h5"><br>
&gt; On Thu, Nov 18, 2010 at 2:52 PM, Arnaud Bailly &lt;<a href="mailto:arnaud.oqube@gmail.com">arnaud.oqube@gmail.com</a>&gt;wrote:<br>
&gt;<br>
&gt;&gt; Thanks a lot, that works perfectly fine!<br>
&gt;&gt; Did not know this one...<br>
&gt;&gt; BTW, I would be interested in the fromInt too.<br>
&gt;&gt;<br>
&gt;&gt; Arnaud<br>
&gt;&gt;<br>
&gt;&gt; On Thu, Nov 18, 2010 at 8:22 PM, Erik Hesselink &lt;<a href="mailto:hesselink@gmail.com">hesselink@gmail.com</a>&gt;<br>
&gt;&gt; wrote:<br>
&gt;&gt;&gt; On Thu, Nov 18, 2010 at 20:17, Arnaud Bailly &lt;<a href="mailto:arnaud.oqube@gmail.com">arnaud.oqube@gmail.com</a>&gt;<br>
&gt;&gt; wrote:<br>
&gt;&gt;&gt;&gt; Hello,<br>
&gt;&gt;&gt;&gt; I am trying to understand and use the Nat n type defined in the<br>
&gt;&gt;&gt;&gt; aforementioned article. Unfortunately, the given code does not compile<br>
&gt;&gt;&gt;&gt; properly:<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt; [snip]<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt; instance (Nat n) =&gt; Nat (Succ n) where<br>
&gt;&gt;&gt;&gt; toInt   _ = 1 + toInt (undefined :: n)<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt; [snip]<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt; And here is the error:<br>
&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt; Naturals.hs:16:18:<br>
&gt;&gt;&gt;&gt;   Ambiguous type variable `n&#39; in the constraint:<br>
&gt;&gt;&gt;&gt;     `Nat n&#39; arising from a use of `toInt&#39; at Naturals.hs:16:18-39<br>
&gt;&gt;&gt;&gt;   Probable fix: add a type signature that fixes these type variable(s)<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt; You need to turn on the ScopedTypeVariables extension (using {-#<br>
&gt;&gt;&gt; LANGUAGE ScopedTypeVariables #-} at the top of your file, or<br>
&gt;&gt;&gt; -XScopedTypeVariables at the command line). Otherwise, the &#39;n&#39; in the<br>
&gt;&gt;&gt; class declaration and in the function definition are different, and<br>
&gt;&gt;&gt; you want them to be the same &#39;n&#39;.<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt; Erik<br>
&gt;&gt;&gt;<br>
&gt;&gt; _______________________________________________<br>
&gt;&gt; Haskell-Cafe mailing list<br>
&gt;&gt; <a href="mailto:Haskell-Cafe@haskell.org">Haskell-Cafe@haskell.org</a><br>
&gt;&gt; <a href="http://www.haskell.org/mailman/listinfo/haskell-cafe" target="_blank">http://www.haskell.org/mailman/listinfo/haskell-cafe</a><br>
&gt;&gt;<br>
&gt; _______________________________________________<br>
&gt; Haskell-Cafe mailing list<br>
&gt; <a href="mailto:Haskell-Cafe@haskell.org">Haskell-Cafe@haskell.org</a><br>
&gt; <a href="http://www.haskell.org/mailman/listinfo/haskell-cafe" target="_blank">http://www.haskell.org/mailman/listinfo/haskell-cafe</a><br>
<br>
</div></div>_______________________________________________<br>
Beginners mailing list<br>
<a href="mailto:Beginners@haskell.org">Beginners@haskell.org</a><br>
<a href="http://www.haskell.org/mailman/listinfo/beginners" target="_blank">http://www.haskell.org/mailman/listinfo/beginners</a><br>
</blockquote></div><br>