#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 Для быстрой проверки вам почти наверняка нужна функция вместо этого.