Pet*_*lák 14 haskell types expression reify template-haskell
给定一个表达式foo,我可以声明一个顶级函数
bar = foo
Run Code Online (Sandbox Code Playgroud)
并通过reifying获得fooas 类型:Type bar
case reify 'bar of
VarI _ t _ _ -> t
Run Code Online (Sandbox Code Playgroud)
是否有直接获取类型的方法foo,而不创建冗余的定义bar?理想情况下作为类型的函数Exp -> Q Type.
您要的是类似Exp -> Q Infoor的函数Exp -> Q Type,是吗?TH 没有提供这样的功能。产生 的唯一 TH 函数Info是reify,并且没有其他 TH 类型似乎公开您所追求的类型信息。目前的 TH API 似乎没有提供一种方法来具体化任意表达式。
我不是 GHC 内部的专家,但通过查找已经编译(和类型检查)的实体并将编译器对其类型等的现有知识转换为 TH 的类型,我compiler/typecheck/TcSplice.hs似乎可以确认这一点。对于任意. 我想我们必须通过另一个编译器传递来检测表达式。reifyInfoExp