如何从其他人的库中定义的类型派生Show?

dan*_*dan 13 haskell typeclass

我正在为OAuth使用Haskell库,并且作者没有为我正在使用的类型派生Show,并且希望能够打印出来进行调试.我想为它推出Show.除了构建函数之外,有没有办法从库外部执行此操作,将所有记录字段复制到一个派生Show的记录类型中?

有问题的类型是来自Network.OAuth.Consumer的令牌:

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

Tik*_*vis 19

您可以使用名为的GHC扩展名StandaloneDeriving.

使用此扩展,您可以编写如下表达式:

deriving instance Show Token
Run Code Online (Sandbox Code Playgroud)

要使用它,请放

{-# LANGUAGE StandaloneDeriving #-}
Run Code Online (Sandbox Code Playgroud)

在您的文件的顶部.

独立派生的语法基本上与instance语句的语法完全相同,除了前面有deriving和没有where子句.这意味着您可以编写更具体的实例,例如:

deriving instance Show a => Foo (Maybe a)
Run Code Online (Sandbox Code Playgroud)

您还必须明确提供实例所需的上下文.你必须写一个像这样的独立实例:

deriving instance Show a => Show (Foo a)
Run Code Online (Sandbox Code Playgroud)

也就是说,您必须明确记录Show a所需的上下文.

这不应该出现在你的情况下,但要记住这一点.