我正在用 Haskell 编写一个简单的解析器,并使用这种保存解析结果的数据类型。
data AST = Imm Integer
| ArgName String
| Arg Integer
| Add AST AST
| Sub AST AST
| Mul AST AST
| Div AST AST
deriving (Show, Eq)
Run Code Online (Sandbox Code Playgroud)
当我想在树上映射以使用映射用其引用号替换变量名称时,问题就出现了。我必须写这段代码
refVars :: M.Map String Integer -> AST -> Maybe AST
refVars d (ArgName s) = case d M.!? s of
Just n -> Just (Arg n)
Nothing -> Nothing
refVars _ (Imm n) = Just $ Imm n
refVars _ (Arg n) = Just $ Arg …Run Code Online (Sandbox Code Playgroud)