对不起我的第一篇文章
snum :: Int->String
snum x
| x > 0 = "Natural"
| x == 0 = "Zero"
| otherwise = "Negative"
为什么我会这么想,'cos haskell告诉我的话;)
snum 4或0或(-5)给我
Ambiguous occurrence `snum'
It could refer to either `Main.snum', defined at snum.hs:2:1
or `Prelude.snum', imported from Prelude
答案 0 :(得分:5)
已经有预定义的值snum
。
可能的解决方法:
重命名您的功能,例如
mySnum :: Int->String
mySnum x
| x > 0 = "Natural"
| x == 0 = "Zero"
| otherwise = "Negative"
隐藏预定义的snum
,在程序开头添加此行:
import Prelude hiding (snum)
但我很好奇:我以前从未听说过预定义的snum
。你用什么来运行你的Haskell程序? GHC?拥抱?别的什么?哪个版本?
答案 1 :(得分:4)
您的代码是正确的,适合我。
也许你关注的可能是负数,例如对于snum -1
这样的来电?在这种情况下,你必须将它们包装在括号中,或者haskell会认为-
是减法的二进制中缀运算符(因此它会尝试从snum
减去1,这是一个函数而不是数字):snum (-1) == "Negative"
将返回True
。