如何使用Type.Reflection库分解/组合类型?

时间:2018-01-08 22:11:11

标签: haskell

这与previous question of mine有关,我被引导到GHC 8.2中的新功能。

新的(在基础4.10中)Type.Reflection图书馆声称:

  

接口提供TypeRep,一种可以安全地分解和组合的类型表示。有关此示例,请参阅Data.Dynamic

Data.Dynamic显示了一种使用TypeRep安全地组合/分解值并检查类型级别相等性的方法。就我而言,我想检查并返回给定TypeRep的基础类型。

现在可以使用各种工具轻松查看某个类型以查看其中的内容。其中一个是函数splitApps :: TypeRep a -> (TyCon, [SomeTypeRep])

问题似乎在于我可以查看TypeRep的任何方式仅提供该类型的非索引版本:SomeTypeRep。所以,我环顾四周,发现mkTrCon :: forall k (a :: k). TyCon -> [SomeTypeRep] -> TypeRep a具有我正在寻找的确切类型签名,并允许我从其组成部分重建TypeRep!除此之外,它没有被模块暴露。

那我错过了什么?有没有办法从TypeRep(即SomeTypeRep)实际重建f :: SomeTypeRep -> TypeRep a或获取构建类型的基础TypeRep?我是否只需要复制Data.Typeable.Internal的来源以访问我想要使用的函数?

0 个答案:

没有答案