什么*不是*可以在GHC 7.8中输入?

时间:2014-06-02 15:47:23

标签: haskell reflection ghc

我正与syntactic的作者合作,为各种类型添加支持。我建议使用类型列表来允许使用任何类型,开发人员提出了一个更清晰的解决方案,允许与Typeable的任何实例一起使用。

我知道(至少当前版本)GHC 7.8中的Data.Reflection doesn't support Typeable reified types,但至少他们提出了使用lens的解决方法。

我的问题是关于图书馆的原始提案:除了(某些形式的)具体类型之外,GHC 7.8 中的哪些其他类型不能成为Typeable的实例?如果这些类型足够奇怪/罕见,则可以使用需要Typeable的干净解决方案,但如果[其他]常用类型不是Typeable,则类型列表将是更通用的解决方案。

2 个答案:

答案 0 :(得分:2)

GHC.TypeLits.SymbolNat不可输入。见https://ghc.haskell.org/trac/ghc/ticket/9111

答案 1 :(得分:1)

Typeable打破了数据类型的抽象:即使隐藏了构造函数,也可以查询任何Typeable的具体结构。

最危险的是,这意味着通过Typeable构建的类型泄露了可能导致使用不当的信息。

因此,通常,被认为是抽象的类型不能是Typeable。类似的游戏和舞蹈与角色注释一起进行,因为GeneralizedNewtypeDeriving是一种反思。