Я пытаюсь создать экземпляр Eq для моего созданного типа списка. Eq должен возвращать true, только если оба средних списка равны.Пытается создать экземпляр экземпляра Haskell
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
Я понимаю, что я должен сделать какое-то ограничение экземпляра, но не знаю, как это сделать. Как сказать, что это может быть только список номеров? –