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

Как вы получаете Show для типа, определенного в другой библиотеке?

Я использую библиотеку Haskell для OAuth, и автор не выводил Show для типа, который я использую, и хотел бы иметь возможность распечатывать для отладки. Я хотел бы получить Show для этого. Есть ли способ сделать это из-за пределов библиотеки, кроме создания функции копирует все поля записи в тип записи, который выводит Show?

Тип, о котором идет речь, - токен из Network.OAuth.Consumer:

http://hackage.haskell.org/packages/archive/hoauth/0.3.5/doc/html/src/Network-OAuth-Consumer.html#Token

4b9b3361

Ответ 1

Вы можете использовать расширение GHC, называемое StandaloneDeriving.

С помощью этого расширения вы можете писать выражения типа:

deriving instance Show Token

Чтобы использовать это, поместите

{-# LANGUAGE StandaloneDeriving #-}

в верхней части файла.

Синтаксис для автономного вывода по существу точно такой же, как синтаксис для оператора instance, за исключением предшествующего deriving и без предложения where. Это означает, что вы можете написать более конкретный экземпляр, например:

deriving instance Show a => Foo (Maybe a)

Вы также должны явно указать контекст, необходимый для вашего экземпляра. Вам нужно будет написать отдельный экземпляр, например:

deriving instance Show a => Show (Foo a)

То есть, вам нужно явно указать необходимый контекст Show a.

Это не должно возникать в вашем случае, но это нужно иметь в виду.