14

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

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

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

4

1 回答 1

21

您可以使用名为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所需的上下文。

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

于 2012-10-10T15:20:22.190 回答