Подтвердить что ты не робот

Haskell: Showing для пользовательского типа

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

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), все, что я хочу напечатать, это строка.

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

РЕДАКТИРОВАТЬ:

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

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

instance Show Operace where
    show (Op _ str _) = str
4b9b3361

Ответ 1

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

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

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

Ответ 2

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