- A+

Category：Languages

I have a data type

`data MyType = Any | A | B | C ... `

and the semantics of "Any" is that it should be equivalent to all other cases. I thought that the most elegant way is to implement my own Eq instance, starting with

`instance Eq MyType where Any == _ = True _ == Any = True `

But now I don't see a way of avoiding repetitive and silly code like

` A == A = True B == B = True ... `

I though of "abusing" the show function and just do `x == y = (show x) == (show y)`

but is there a cleaner way?

You could perhaps do something like this:

`data Wildcard a = Any | Card a data NewType = A | B | C | ... deriving Eq type OldType = Wildcard NewType instance (Eq a) => Eq (Wildcard a) where Any == _ = True _ == Any = True Card l == Card r = l == r `

This way, the compiler auto-derives `Eq OldType`

for you, and we have `Eq NewType`

with the expected semantics. (And we can apply `Any`

over any type we fancy...)