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

时间:2012-10-10 15:17:37

标签: 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

1 个答案:

答案 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上下文。

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