我正在为 OAuth 使用 Haskell 库,并且作者没有为我正在使用的类型派生 Show 并且希望能够打印出来以进行调试。我想为它派生 Show。除了构建一个函数将所有记录字段复制到派生 Show 的记录类型之外,还有什么方法可以从库外部执行此操作?
有问题的类型是来自 Network.OAuth.Consumer 的 Token:
我正在为 OAuth 使用 Haskell 库,并且作者没有为我正在使用的类型派生 Show 并且希望能够打印出来以进行调试。我想为它派生 Show。除了构建一个函数将所有记录字段复制到派生 Show 的记录类型之外,还有什么方法可以从库外部执行此操作?
有问题的类型是来自 Network.OAuth.Consumer 的 Token:
您可以使用名为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
所需的上下文。
这不应该出现在你的情况下,但要记住这一点。