我是Haskell的新手,我不知道我在这里做错了什么。以下代码生成错误。
numOfPos :: Num a => [a] -> Int
numOfPos xs = length [x | x <- xs, x > 0]
代码只返回列表中的正元素数。该列表可以包含任何类型的数字。
错误显示“由于使用'&lt;'而无法推断(Ord a)从上下文(Num a)......“
允许此功能的类型声明是什么?
答案 0 :(得分:4)
(>)
is defined on the Ord
typeclass,而不是Num
类型类,因此您需要将Num
和Ord
约束放在a
上才能实现此目的:
numOfPos :: (Num a, Ord a) => [a] -> Int
numOfPos xs = length [x | x <- xs, x > 0]
有关为什么Num
(&#34;数字&#34;)的元素不属于Ord
(&#34;具有排序&#34的对象; ),见this question。