我正与syntactic的作者合作,为各种类型添加支持。我建议使用类型列表来允许使用任何类型,开发人员提出了一个更清晰的解决方案,允许与Typeable
的任何实例一起使用。
我知道(至少当前版本)GHC 7.8中的Data.Reflection
doesn't support Typeable
reified types,但至少他们提出了使用lens
的解决方法。
我的问题是关于图书馆的原始提案:除了(某些形式的)具体类型之外,GHC 7.8 中的哪些其他类型不能成为Typeable
的实例?如果这些类型足够奇怪/罕见,则可以使用需要Typeable
的干净解决方案,但如果[其他]常用类型不是Typeable
,则类型列表将是更通用的解决方案。
答案 0 :(得分:2)
GHC.TypeLits.Symbol
和Nat
不可输入。见https://ghc.haskell.org/trac/ghc/ticket/9111
答案 1 :(得分:1)
Typeable
打破了数据类型的抽象:即使隐藏了构造函数,也可以查询任何Typeable
的具体结构。
最危险的是,这意味着通过Typeable
构建的类型泄露了可能导致使用不当的信息。
因此,通常,被认为是抽象的类型不能是Typeable
。类似的游戏和舞蹈与角色注释一起进行,因为GeneralizedNewtypeDeriving
是一种反思。