1
作成したリストタイプのEqインスタンスを作成しようとしています。 Eqは両方のリストの平均値が等しい場合にのみtrueを返さなければなりません。Haskell Eqインスタンスを作成しようとしています
average :: (Real a, Fractional b) => [a] -> b
average xs
| xs == [] = 0
| otherwise = realToFrac (sum xs)/genericLength xs
data NumList a = Nlist [a]
instance Eq (NumList a) where
(Nlist x) == (Nlist y) = (average x) == (average y)`
しかし、私はこれをコンパイルしようとすると、私はエラーを取得:
No instance for (Real a) arising from a use of ‘average’
Possible fix:
add (Real a) to the context of the instance declaration
In the first argument of ‘(==)’, namely ‘(average x)’
In the expression: (average x) == (average y)
In an equation for ‘==’:
(Nlist x) == (Nlist y) = (average x) == (average y)
私はHaskellのでよくないですし、それを学ぼうとし、いくつかのいずれかが、このエラーで私を助けることができますか?
を?どのようにバナナのリストを平均化していますか? – MathematicalOrchid
私はある種のインスタンス制約を作成する必要があることを理解していますが、実際の作成方法はわかりません。どのように番号リストだけことができることを伝える? –