给定一个表达式foo,我可以声明一个顶级函数
bar = foo
并通过reifyingfoo获得as的类型:Type bar
case reify 'bar of
VarI _ t _ _ -> t
有没有一种直接的方法来获取 的类型foo,而无需创建 的冗余定义bar?理想情况下作为类型的函数Exp -> Q Type。
给定一个表达式foo,我可以声明一个顶级函数
bar = foo
并通过reifyingfoo获得as的类型:Type bar
case reify 'bar of
VarI _ t _ _ -> t
有没有一种直接的方法来获取 的类型foo,而无需创建 的冗余定义bar?理想情况下作为类型的函数Exp -> Q Type。
您要的是类似Exp -> Q Infoor类型的函数Exp -> Q Type,是吗?TH 不提供这样的功能。唯一产生Infois的 TH 函数,reify似乎没有其他 TH 类型会公开您所追求的类型信息。当前的 TH API 似乎没有提供具体化任意表达式的方法。
我不是 GHC 内部的专家,但通过查找已经编译(和类型检查)的实体并将编译器对其类型等的现有知识转换为 TH类型,compiler/typecheck/TcSplice.hs似乎证实了它的工作原理。对于任意的. 我想我们必须通过另一个编译器通道来回溯表达式。reifyInfoExp