GHC 7.8 中哪些*不能*键入?



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

我知道(至少当前版本)Data.Reflection在GHC 7.8中不支持Typeable具体化的类型,但至少他们提出了使用lens的解决方案。

我的问题是关于库的原始建议:除了(某些形式)具体化类型之外,GHC 7.8 中还有哪些类型不能作为Typeable的实例?如果这些类型足够奇怪或罕见,则可以使用要求Typeable的干净解决方案,但如果存在[其他]常用类型而不是Typeable,则类型列表将是更通用的解决方案。

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

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

最危险的是,这意味着通过Typeable构造的类型会泄漏信息,从而可能导致不正确的使用。

因此,一般来说,被认为是抽象的类型不能是Typeable。由于GeneralizedNewtypeDeriving是一种反射,因此使用角色注释进行类似的游戏和舞蹈。

相关内容

  • 没有找到相关文章

最新更新