J'ai un type de conteneur, appelé X
. Comme je veux des listes hétérogènes sur X
, son constructeur est typé existentiellement sur une variable de type a
. Cependant, je veux que ce soit une instance de la classe de type Eq
. Une solution hackish ressemble à ceci:GADT, types non paramétrés et instance Eq pour eux
{-# LANGUAGE GADTs #-}
data X where X :: (Eq a, Show a) => a -> X
instance Eq X where
X x == X y = show x == show y
Quelle serait la solution (propre) la plus simple pour ce problème?
(X
s ne sont pas égaux si elles ne sont pas du même type.)