2017-03-20 2 views
1

저는 하스켈을 처음 접했고 여기에서 내가 뭘 잘못하고 있는지 전혀 몰랐습니다. 다음 코드는 오류를 생성합니다.타입 목록 선언을위한 Num 목록

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

코드는 목록의 양수 요소 수를 반환합니다. 목록에는 모든 유형의 번호가 포함될 수 있습니다.

은 오류 "라 함은 문맥에 (민가)에서 '<'의 사용으로 인해 발생하는 (ORD의 A)를 추론 할 수 없습니다 ..."라고

이 허용하는 가정 유형 선언 무엇입니까 기능?

+1

'(Num a, Ord a) => [a] -> Int' –

답변

4

(>) is defined on the Ord typeclass 아닌 Num typeclass, 당신이 작동하지 a에 모두 NumOrd 제약을 둘 필요가 있도록 :

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

Num의 요소 ("숫자") 때로 믿을 이유에 대한 자세한 내용은 Ord의 요소 ("주문한 개체")는 this question을 참조하십시오.