значения переменных типа доступа в объявлении экземпляра

#haskell

#haskell

Вопрос:

У меня есть newtype обертывание функции

 newtype Operation a b = Operation (a -> b)
  

Я хотел бы написать Show экземпляр для этого типа данных, предоставляющий такую информацию, как "Operation(Int -> String)" . Для этого мне нужно было бы получить доступ к значению переменных типа a и b в реализации show . Возможно ли это?

Я бы сказал «нет», но Haskell не перестает меня удивлять, поэтому я подумал, что могу спросить

Ответ №1:

Сначала позвольте мне сказать, что это плохая идея: Show экземпляры должны фактически предоставлять вам содержимое / значение, а не просто информацию о типе.

В любом случае, хотя…

 import Data.Typeable

instance (Typeable a, Typeable b) => Show (Operation a b) where
  show (Operation f) = "«Operation("  show (typeOf f)  ")»"
  

Комментарии:

1. Спасибо. Я согласен, что предоставлять такой экземпляр Show — не лучшая идея. Я использую QuickCheck, и я хотел бы использовать Operation в a качестве hackage.haskell.org/package/QuickCheck-2.14.1/docs /… , для которого требуется Show экземпляр

2. @marcosh Для быстрой проверки вам почти наверняка нужна функция вместо этого.