我有一个简单的函数定义如下:
allZero :: Num a => [a]-> Bool
allZero [] = False
allZero xs = and (map (== 0) xs)
加载时会返回错误消息:
无法推断(Num a)因文字“0'
而产生
这个功能有什么问题?如何将数字0过载到任何数字类型a?
答案 0 :(得分:7)
一旦您向Eq a
添加allZero
约束,此代码就会编译。编译此代码应该没有其他问题。
allZero :: (Num a, Eq a) => [a]-> Bool
allZero [] = False
allZero xs = and (map (== 0) xs)
正如一些评论者指出的那样,第一个案例是非标准的,因为allZero
的{{1}}通常为[]
。根据该定义,第一种情况变得多余。