The best you can do with fromInt is something like Int -> (forall n. (Nat n) => n -> r) -> r, since the type isn't known at compile time.

On Thu, Nov 18, 2010 at 2:52 PM, Arnaud Bailly <arnaud.oqube@gmail.com> wrote:
Thanks a lot, that works perfectly fine!
Did not know this one...
BTW, I would be interested in the fromInt too.

Arnaud

On Thu, Nov 18, 2010 at 8:22 PM, Erik Hesselink <hesselink@gmail.com> wrote:
> On Thu, Nov 18, 2010 at 20:17, Arnaud Bailly <arnaud.oqube@gmail.com> wrote:
>> Hello,
>> I am trying to understand and use the Nat n type defined in the
>> aforementioned article. Unfortunately, the given code does not compile
>> properly:
>
> [snip]
>
>> instance (Nat n) => Nat (Succ n) where
>>  toInt   _ = 1 + toInt (undefined :: n)
>
> [snip]
>
>> And here is the error:
>>
>> Naturals.hs:16:18:
>>    Ambiguous type variable `n' in the constraint:
>>      `Nat n' arising from a use of `toInt' at Naturals.hs:16:18-39
>>    Probable fix: add a type signature that fixes these type variable(s)
>
> You need to turn on the ScopedTypeVariables extension (using {-#
> LANGUAGE ScopedTypeVariables #-} at the top of your file, or
> -XScopedTypeVariables at the command line). Otherwise, the 'n' in the
> class declaration and in the function definition are different, and
> you want them to be the same 'n'.
>
> Erik
>
_______________________________________________
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe