给定一个表达式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 Info
or类型的函数Exp -> Q Type
,是吗?TH 不提供这样的功能。唯一产生Info
is的 TH 函数,reify
似乎没有其他 TH 类型会公开您所追求的类型信息。当前的 TH API 似乎没有提供具体化任意表达式的方法。
我不是 GHC 内部的专家,但通过查找已经编译(和类型检查)的实体并将编译器对其类型等的现有知识转换为 TH类型,compiler/typecheck/TcSplice.hs
似乎证实了它的工作原理。对于任意的. 我想我们必须通过另一个编译器通道来回溯表达式。reify
Info
Exp