web-dev-qa-db-fra.com

HASKELL: dérivé du spectacle pour le type personnalisé

J'ai cette définition de ce type:

data Operace = Op (Int->Int->Int) String (Int->Int->Int) deriving Show

Je veux imprimer ce type dans la coque interactive (GHCI). Tout ce qui devrait être imprimé est le champ String.

J'ai essayé ceci:

instance Show Operace where
    show (Op op str inv) = show str

Mais je continue toujours à obtenir

No instance for (Show (Int -> Int -> Int))
  arising from the 'deriving' clause of a data type declaration
Possible fix:
  add an instance declaration for (Show (Int -> Int -> Int))
  or use a standalone 'deriving instance' declaration,
       so you can specify the instance context yourself
When deriving the instance for (Show Operace)

Je ne veux pas ajouter Show pour (Int->Int->Int), tout ce que je veux imprimer est la chaîne.

Merci pour l'aide!

Edit :

Pour une référence future, la version fixe est la suivante:

data Operace = Op (Int->Int->Int) String (Int->Int->Int)

instance Show Operace where
    show (Op _ str _) = str
30
Matěj Zábský

La déclaration d'instance que vous avez faite est la bonne façon d'aller. Il semble que vous ayez oublié de supprimer cette clause erronée deriving de la déclaration d'origine data.

data Operace = Op (Int->Int->Int) String (Int->Int->Int)

instance Show Operace where
   show (Op op str inv) = show str
23
hugomg

Vous pouvez dériver Show, juste importer Text.Show.Functions premier.

23