列出 Quasiquote monad 中的所有固定性声明
Listing all fixity declarations in Quasiquote monad
我想列出 Quasiquote monad 中的所有固定性声明,以便我能够将所有中缀运算符从 Haskell 语法传递到我的 Quasiquote 语法。
template-haskell
中有什么方法可以让我这样做吗?我找不到。
谢谢。
经过进一步研究,我在GHC Gitlab中找到了相关的issue。
问题无法解决,因为编译逻辑不允许。例如,可能有两个模板,它们都进行了新的固定性声明,因此如果它们都试图列出所有模板,它们可能会以无限循环结束。
如果我想要获取所有固定性声明的唯一原因是解析中缀运算符以供 Haskell 稍后使用,建议使用 UInfixE Exp Exp Exp
。
使用 UInfixE
创建的任意树稍后由 Haskell 编译器处理为正确的 "InfixE"
树,因此表达式已正确处理所有固定性声明。
语法粗心和类型忽略示例:
UInfixE 1 * (UnfixE 2 + 3)
模板传递的 UInfixE 1 * (UnfixE 2 + 3)
在编译的后期阶段转换为 InfixE (InfixE 1 * 2) + 3
我想列出 Quasiquote monad 中的所有固定性声明,以便我能够将所有中缀运算符从 Haskell 语法传递到我的 Quasiquote 语法。
template-haskell
中有什么方法可以让我这样做吗?我找不到。
谢谢。
经过进一步研究,我在GHC Gitlab中找到了相关的issue。
问题无法解决,因为编译逻辑不允许。例如,可能有两个模板,它们都进行了新的固定性声明,因此如果它们都试图列出所有模板,它们可能会以无限循环结束。
如果我想要获取所有固定性声明的唯一原因是解析中缀运算符以供 Haskell 稍后使用,建议使用 UInfixE Exp Exp Exp
。
使用 UInfixE
创建的任意树稍后由 Haskell 编译器处理为正确的 "InfixE"
树,因此表达式已正确处理所有固定性声明。
语法粗心和类型忽略示例:
UInfixE 1 * (UnfixE 2 + 3)
模板传递的 UInfixE 1 * (UnfixE 2 + 3)
在编译的后期阶段转换为 InfixE (InfixE 1 * 2) + 3