2014-09-21 48 views
2

我在看Plurasight中的'Haskell Fundamentals Part 1'。在第二章中,作者用表示一個非常簡單的函數,如果其中有。當我嘗試它時,我每次嘗試帶負數的函數時都會出錯。下面是函數爲什麼負數在下面的條件中會引發錯誤?

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

當我試圖用正數的方法,它工作得很好,但是當我打電話與負數的方法,winGHCi拋出下面的錯誤。
「沒有用於(顯示(a0 - > [Char])))由於使用」打印「而產生的實例...」
更多地是它,那麼這裏的功能呢?

回答

14

當將相同的函數應用於相同類型的正數時,您將無法獲得將函數應用於負數的類型錯誤。

在沒有看到代碼,最可能的解釋是,你寫的東西像posOrNeg -42,這是一樣的posOrNeg - 42並試圖從posOrNeg減去42(因爲,當然,你不能減,這是不可能一個函數中的數字)。將函數應用於負數的正確語法是posOrNeg (-42),其中帶有括號,因此無法將-解析爲中綴運算符。

+0

是的,我沒有通過括號中的負數。我以前不知道那個區別。有道理。 – Nair 2014-09-21 04:19:01

+4

請注意,使用'-XNegativeLiterals',您可以執行'posOrNeg -42'(但不是'posOrNeg - 42')。 – leftaroundabout 2014-09-21 08:23:59

+0

有時使用'negate'會比較容易使用,這取決於情況 – Carsten 2014-09-23 20:43:50

相關問題