输入Num的声明

时间:2017-03-20 22:08:12

标签: haskell

我是Haskell的新手,我不知道我在这里做错了什么。以下代码生成错误。

numOfPos :: Num a => [a] -> Int
numOfPos xs = length [x | x <- xs, x > 0]

代码只返回列表中的正元素数。该列表可以包含任何类型的数字。

错误显示“由于使用'&lt;'而无法推断(Ord a)从上下文(Num a)......“

允许此功能的类型声明是什么?

1 个答案:

答案 0 :(得分:4)

(>) is defined on the Ord typeclass,而不是Num类型类,因此您需要将NumOrd约束放在a上才能实现此目的:

numOfPos :: (Num a, Ord a) => [a] -> Int
numOfPos xs = length [x | x <- xs, x > 0]

有关为什么Num(&#34;数字&#34;)的元素不属于Ord(&#34;具有排序&#34的对象; ),见this question