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

David McBride toad3k at gmail.com
Mon Feb 8 16:43:29 UTC 2016


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
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.haskell.org/pipermail/beginners/attachments/20160208/fedf46a6/attachment.html>


More information about the Beginners mailing list