[英]How to pattern match for the infix / operator in Haskell?
我试图在Haskell中编写一个递归数据结构,以表示一个表达式树。 我有这种数据类型:
data Expr =
And(Expr, Expr ) |
Or (Expr, Expr ) |
(/) Expr Expr
我想模式匹配函数中的每个数据构造函数:
toStringE :: Expr -> String
toStringE e = case e of
And(a,b) -> "and(" ++ toStringE a ++ ", " ++ toStringE b ++ ")"
Or(a,b) -> "or(" ++ toStringE a ++ ", " ++ toStringE b ++ ")"
(/) expr1 expr2 -> (toStringE expr1) ++ " / " ++ (toStringE expr2)
但是当我尝试编译时,我在toStringE函数的最后一行得到了这个错误:
Parse error in pattern: (/)
你觉得我做错了什么?
(/)
不是有效的中缀数据构造函数。 所有有效的中缀数据构造函数都以:
。 例如,您可以命名构造函数(:/)
。
这样做的原因是模式匹配取决于能否确定某些东西是构造函数还是不是词法。 它通过检查标识符的第一个字符来做到这一点。 如果它是大写字母或:
,则它是构造函数。 如果它不是其中之一,那么它是一个受模式匹配约束的变量。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.