这与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
的来源以访问我想要使用的函数?