Haskell - 重载数字类型

时间:2015-10-22 16:21:03

标签: haskell polymorphism overloading

我有一个简单的函数定义如下:

allZero :: Num a => [a]-> Bool
allZero [] = False
allZero xs = and (map (== 0) xs)

加载时会返回错误消息:

  

无法推断(Num a)因文字“0'

而产生

这个功能有什么问题?如何将数字0过载到任何数字类型a?

1 个答案:

答案 0 :(得分:7)

一旦您向Eq a添加allZero约束,此代码就会编译。编译此代码应该没有其他问题。

allZero :: (Num a, Eq a) => [a]-> Bool
allZero [] = False
allZero xs = and (map (== 0) xs)

正如一些评论者指出的那样,第一个案例是非标准的,因为allZero的{​​{1}}通常为[]。根据该定义,第一种情况变得多余。