Cross-post from Slack:
Hey, could someone tell me why this code snippet doesn’t work? (No type class instance was found for Data.Eq.Eq (Extended a0))
data Extended a = Finite a | Infinite
instance extendedOrd :: (Ord a) => Ord (Extended a) where
compare (Finite x) (Finite y) = compare x y
compare Infinite (Finite _) = GT
compare (Finite _) Infinite = LT
compare Infinite Infinite = EQ
Answer:
You have to implement Eq (Extended a)
as well, as it’s a superclass of Ord
https://pursuit.purescript.org/packages/purescript-prelude/4.1.1/docs/Data.Ord#t:Ord
Btw, you can derive both instances. It is exactly the same as the manual implementation:
derive instance extendedEq :: (Eq a) => Eq (Extended a)derive instance extendedOrd :: (Ord a) => Ord (Extended a)
This relies on the order of the constructors in the data definition.