По примеру в http://en.wikibooks.org/wiki/Haskell/Beginning
Prelude> let abs x = if x < 0 then -x else x Prelude> abs 5 5 Prelude> abs -3 <interactive>:1:6: No instance for (Num (a0 -> a0)) arising from the literal `3' Possible fix: add an instance declaration for (Num (a0 -> a0)) In the second argument of `(-)', namely `3' In the expression: abs - 3 In an equation for `it': it = abs - 3
Что не так?
Хаскелл думает, что вы пытаетесь вычесть 3 из abs, и жалуется, что abs - это не число.Вам необходимо добавить круглые скобки при использовании унарного оператора отрицания:
3
abs
abs (-3)
Переводчик думает, что вы имеете в виду abs - 3, а не abs (-3).Вам нужны скобки для устранения неоднозначности кода и чтобы было ясно, что вы собираетесь использовать унарную функцию "-", а не оператор вычитания.
abs - 3