2

我有一个 AST 类型,我想将它派生为 Typeable,这样我就可以对它进行 Scrap-your-boilerplate 泛型遍历。

但是,树使用Doc来自 pretty 包的 Text.PrettyPrint 库类型的消息进行注释。要派生 Typeable,需要有 的可类型实例Doc

这是我尝试过但失败的方法:

deriving instance Data P.Doc
deriving instance Typeable P.Doc

给出这个错误:

Can't make a derived instance of `Data P.Doc':
  The data constructors of `P.Doc' are not all in scope
    so you cannot derive an instance for it
In the stand-alone deriving instance for `Data P.Doc'

或者,我尝试派生我自己的实例:

instance Typeable P.Doc where 
    typeRep v = typeRep $ show v   

这给出了这个错误:

 `typeRep' is not a (visible) method of class `Typeable'      

难道我做错了什么?是否有一种标准方法可以为其他库中给出的类型派生可类型化?

问题是,实例并不是非常重要。我知道我的 AST 没有任何部分以递归方式存储在 Doc 值中。但是如果我没有那个实例,GHC 就会抱怨。

4

0 回答 0