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和努力學習它,能有人幫我這個錯誤?
如果你有'NumList Banana'?你如何取得一串香蕉? – MathematicalOrchid
我明白我應該制定某種實例約束,但不知道如何製作它。如何告訴它,它只能是數字列表? –