Haskell: Deriving Show для пользовательского типа - PullRequest
27 голосов
/ 21 мая 2011

У меня есть определение этого типа:

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

Я хочу напечатать этот тип в интерактивную оболочку (GHCi). Все, что должно быть напечатано, это поле String.

Я пробовал это:

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

Но я все еще продолжаю получать

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)

Я не хочу добавлять Show для (Int->Int->Int), все, что я хочу напечатать, это строка.

Спасибо за помощь!

EDIT:

Для дальнейшего использования исправлена ​​версия:

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

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

Ответы [ 2 ]

23 голосов
/ 21 мая 2011

Объявление экземпляра - правильный путь. Кажется, вы забыли удалить это ошибочное предложение deriving из исходного объявления data.

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

instance Show Operace where
   show (Op op str inv) = show str
22 голосов
/ 21 мая 2011

Вы можете получить Show, просто сначала импортируйте Text.Show.Functions.

...