2014-09-21 10 views
2

Я наблюдаю за «Основами Haskell Part 1» в Pluralsight. Во второй главе автор показывает очень простую функцию с , если в ней находится. Когда я пробовал это, я получаю ошибку каждый раз, когда я пробовал функцию с отрицательным числом. Вот функцияПочему отрицательное число в следующем случае, если условие вызывает ошибку?

posOrNeg x = 
    if x >= 0 
    then "Positive" 
    else "Negative" 

Когда я попробовал этот метод с положительным числом он работал нормально, но когда я вызываю метод с отрицательным числом, winGHCi бросками следующее сообщение об ошибке.
«Нет экземпляра для (Показать (a0 -> [Char]))), возникающего из-за использования« print »...»
Разве это больше, чем функция здесь?

ответ

14

Невозможно получить ошибку типа для применения функции к отрицательному числу при применении одной и той же функции к положительному числу одного и того же типа.

Не видя кода, наиболее вероятным объяснением является то, что вы написали что-то вроде posOrNeg -42, что то же самое, как posOrNeg - 42 и пытается вычесть 42 из posOrNeg (что не возможно, потому что, конечно, вы не можете вычесть число из функции). Правильный синтаксис применения функции к отрицательному числу - posOrNeg (-42) с круглыми скобками вокруг номера, так что это невозможно разобрать - в качестве инфиксного оператора.

+0

Да, я не передал отрицательное число в круглых скобках. Раньше я не знал об этой разнице. Это имеет смысл. – Nair

+4

Обратите внимание, что с '-XNegativeLiterals' вы можете сделать' posOrNeg -42' (но не 'posOrNeg-42'). – leftaroundabout

+0

иногда проще использовать 'negate', немного зависит от ситуации – Carsten

Смежные вопросы