2015-08-18 34 views
4
getNext a = if even a then a/2 else (3*a)+1 

由於某種原因,此行代碼返回無法解析的重載錯誤。Haskell中無法解析的重載錯誤

Main> getNext 13 
ERROR - Unresolved overloading 
*** Type  : (Fractional a, Integral a) => a 

我在做什麼錯,或者我錯過了什麼?我在一段時間內沒有使用Haskell,所以我可能會忘記一些事情。

+0

錯誤的意思是:「你想要一個滿足約束'Fractional'和'Integral'的類型,但我不知道任何類型。」此外,這也可能與默認值(在'Num'上下文中使用)有關,所以問題在於'13'是多態的,'getNext'也是多態的,所以即使有一個類型, d得到類似於執行如下操作的錯誤:'show。 read'。 – Bakuriu

回答

7

你可能想

a `div` 2 

而不是

a/2 

的錯誤發生,因爲even a意味着a是一個整數,而是使用了非整數除法運算符/的其他方式暗示。