我正在为OAuth使用Haskell库,并且作者没有为我正在使用的类型派生Show,并且希望能够打印出来进行调试。我想为它推出Show。除了构建函数之外,有没有办法从库外部执行此操作,将所有记录字段复制到一个派生Show的记录类型中?
有问题的类型是来自Network.OAuth.Consumer的令牌:
答案 0 :(得分:19)
您可以使用名为StandaloneDeriving
的GHC扩展程序。
使用此扩展程序,您可以编写如下表达式:
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
上下文。
这不应该出现在你的情况下,但要记住这一点。