2017-03-20 8 views
1

私はハスケルを新しくしています。私はここで何が間違っているのか分かりません。次のコードはエラーを生成します。タイプの宣言Numのリスト

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

コードは、リスト内のポジティブ要素の数を返します。リストには、任意のタイプの番号を含めることができます。

エラーは、「(オードa)は、コンテキスト(ヌムA)から 『<』の使用から生じる推測できませんでした...」

を型宣言は、これを許可することになって何と言います関数?

+1

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

答えて

4

(>) is defined on the Ord typeclass、ないNum型クラスなので、あなたが仕事に、このためaの両方NumOrd制約を配置する必要があります。Num(「数字」)の要素が上がらない理由の詳細については

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

Ordの要素(「注文するオブジェクト」)は、this questionを参照してください。

関連する問題