gpt4 book ai didi

haskell - 是否可以使用 Template Haskell 获得任何类型的表达式?

转载 作者:行者123 更新时间:2023-12-03 22:38:44 24 4
gpt4 key购买 nike

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

bar = foo

并获取 foo 的类型如 Typereifying bar :
case reify 'bar of
VarI _ t _ _ -> t

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

最佳答案

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

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

关于haskell - 是否可以使用 Template Haskell 获得任何类型的表达式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21490821/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com