我有一个 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 就会抱怨。