You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何快速查看Haskell表达式解析结构?能否让GHCi显示带括号的AST?

如何让GHCi显示Haskell表达式的完整括号解析形式

核心方法:启用显式括号打印选项

GHCi提供了-fprint-explicit-parens选项,能让表达式打印时显示所有AST节点对应的括号,完全还原解析顺序。操作步骤:

  1. 打开GHCi,先设置选项:
    :set -fprint-explicit-parens
    
  2. 定义你需要测试的自定义运算符(以你给出的例子为例):
    infixl 6 ¤
    (¤) = (+) -- 仅为占位定义,不影响解析逻辑
    infixl 7 ⏆
    (⏆) = (*)
    infixr 8 ♂
    (♂) = (^)
    
  3. 输入目标表达式,GHCi会直接输出带完整括号的解析结果:
    7 ¤ 2 ⏆ 4 ⏆ 3 ¤ 1 ♂ 3 ♂ 2
    -- 输出:(7 ¤ ((2 ⏆ 4) ⏆ 3)) ¤ (1 ♂ (3 ♂ 2))
    

其他快速理解表达式解析逻辑的方法

  • 直接查询运算符属性:用:i(:info的缩写)命令查看单个运算符的优先级和结合性,比如:
    :i (¤)
    -- 输出:infixl 6 ¤,说明是左结合,优先级6
    
    记住规则:优先级数字(0-9)越大,运算符越先被解析;左结合(infixl)从左到右分组,右结合(infixr)从右到左分组。
  • 分步拆分测试:把复杂表达式拆成多个子部分,逐个输入GHCi观察解析结果,比如先测试2 ⏆ 4 ⏆ 3,会得到((2 ⏆ 4) ⏆ 3),验证左结合规则;测试1 ♂ 3 ♂ 2得到(1 ♂ (3 ♂ 2)),验证右结合规则。
  • 括号强制对比:手动给表达式加不同的括号,输入GHCi后对比结果是否和原表达式一致,以此反推原表达式的解析顺序。

内容的提问来源于stack exchange,提问作者Blue Nebula

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.04 19:30:35