我正在与syntactic的作者合作,以增加对各种类型的支持。我建议使用类型列表来允许使用任何类型,开发人员提出了一个更干净的解决方案,允许使用Typeable
的任何实例。
我知道(至少当前版本)Data.Reflection
在GHC 7.8中不支持Typeable
具体化的类型,但至少他们提出了使用lens
的解决方案。
我的问题是关于库的原始建议:除了(某些形式)具体化类型之外,GHC 7.8 中还有哪些类型不能作为Typeable
的实例?如果这些类型足够奇怪或罕见,则可以使用要求Typeable
的干净解决方案,但如果存在[其他]常用类型而不是Typeable
,则类型列表将是更通用的解决方案。
GHC.TypeLits.Symbol
和Nat
不可输入。见https://ghc.haskell.org/trac/ghc/ticket/9111
Typeable
打破了数据类型的抽象:任何Typeable
的具体结构都可以被查询,即使它的构造函数是隐藏的。
最危险的是,这意味着通过Typeable
构造的类型会泄漏信息,从而可能导致不正确的使用。
因此,一般来说,被认为是抽象的类型不能是Typeable
。由于GeneralizedNewtypeDeriving
是一种反射,因此使用角色注释进行类似的游戏和舞蹈。