15

给定一个表达式foo,我可以声明一个顶级函数

bar = foo

并通过reifyingfoo获得as的类型:Type bar

case reify 'bar of
  VarI _ t _ _ -> t

有没有一种直接的方法来获取 的类型foo,而无需创建 的冗余定义bar?理想情况下作为类型的函数Exp -> Q Type

4

1 回答 1

5

您要的是类似Exp -> Q Infoor类型的函数Exp -> Q Type,是吗?TH 不提供这样的功能。唯一产生Infois的 TH 函数,reify似乎没有其他 TH 类型会公开您所追求的类型信息。当前的 TH API 似乎没有提供具体化任意表达式的方法。

我不是 GHC 内部的专家,但通过查找已经编译(和类型检查)的实体并将编译器对其类型等的现有知识转换为 TH类型,compiler/typecheck/TcSplice.hs似乎证实了它的工作原理。对于任意的. 我想我们必须通过另一个编译器通道来回溯表达式。reifyInfoExp

于 2014-12-05T04:25:24.817 回答