[Haskell-beginners] Got "Non type-variable argument in the constraint" error for a simple function

wizard xie.zhiyi at gmail.com
Mon Feb 8 20:20:48 UTC 2016


Thanks Frerich and David! I got it, :-)

2016-02-09 0:43 GMT+08:00 David McBride <toad3k at gmail.com>:

> If you are wondering why you are having this problem it is because - can
> be interpretted as either a one argument negation or a two argument
> subtraction.  If you put parenthesis around (-n) where n is an integer, it
> will interpret it as unary, something that will not happen in other
> operators.
>
> >:t (-)
> (-) :: Num a => a -> a -> a
> >:t (+)
> (+) :: Num a => a -> a -> a
> >:t (-1)
> (-1) :: Num a => a
> >:t (+1)
> (+1) :: Num a => a -> a
> >:t (1-1)
> (1-1) :: Num a => a
> >:t (1+1)
> (1+1) :: Num a => a
>
>
> On Mon, Feb 8, 2016 at 11:24 AM, wizard <xie.zhiyi at gmail.com> wrote:
>
>> Dear all,
>>
>> I just started to learn Haskell with learnyouahaskell.com and at the
>> very beginning, I met a strange issue with following simple function:
>>
>> -- why does work with "toZero 10" but not for "toZero -10"?toZero :: (Integral t) => t -> [t]toZero 0 = [0]toZero x = if x > 0 then x : toZero (x - 1)
>>                     else x : toZero (x + 1)
>>
>>
>> This function works as expected for positive arguments, e.g., "toZero 10"
>> gives me [10,9,8,7,6,5,4,3,2,1,0]. However, GHCI will raise following error
>> if I give it a negative argument, e.g., "toZero -10":
>>
>> *Main> toZero -10
>>
>> <interactive>:12:1:
>>     Non type-variable argument in the constraint: Num (t -> [t])
>>     (Use FlexibleContexts to permit this)
>>     When checking that ‘it’ has the inferred type
>>       it :: forall t. (Integral t, Num (t -> [t])) => t -> [t]
>>
>>
>> This seems strange to me as 10 and -10 has exactly the same type "Num a
>> => a". I've done with chapter 1~10 of learnyouahaskell.com but still has
>> no idea on why this error. Anybody can help to explain this?
>> Thanks a lot.
>>
>> Regards
>> Zhiyi Xie
>>
>> _______________________________________________
>> Beginners mailing list
>> Beginners at haskell.org
>> http://mail.haskell.org/cgi-bin/mailman/listinfo/beginners
>>
>>
>
> _______________________________________________
> Beginners mailing list
> Beginners at haskell.org
> http://mail.haskell.org/cgi-bin/mailman/listinfo/beginners
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.haskell.org/pipermail/beginners/attachments/20160209/800d6646/attachment-0001.html>


More information about the Beginners mailing list