Haskell: les types de données Algebric dont les variables de type doivent être une instance d'une classe de types

StackOverflow https://stackoverflow.com/questions/1319057

Question

Je suis en train de définir un type algébrique:

data MyType t = MyType t

Et en faire une instance de Show:

instance Show (MyType t) where
  show (MyType x) = "MyType: " ++ (show x)

GHC se plaint becasue il ne peut pas en déduire que le type 't' dans 'Show (MyType t)' est en fait une instance de Show, qui est nécessaire pour (montrer x).

Je ne sais pas où et comment puis-je déclare « t » être une instance de Show?

Était-ce utile?

La solution

Ajouter une contrainte de type sur le type de t:

instance Show t => Show (MyType t) where
  show (MyType x) = "MyType: " ++ (show x)

Autres conseils

Vous pouvez aussi simplement:

data MyType t = MyType t
    deriving Show

si vous voulez un format d'exposition régulière.

Une autre solution consiste à utiliser GADTs:

data MyType t  where 
   MyType :: Show a => a -> MyType a
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top