【发布时间】:2014-07-15 07:37:11
【问题描述】:
我遇到了一种情况,我想对运算符进行模式匹配。但是,这会在 GHC 中引发 Pattern match(es) are overlapped 错误。我不知道为什么。不允许对运算符进行模式匹配吗?我假设由于将运算符符号括在括号 converts it into an identifier 中,这应该可以工作。
test :: (Integer -> Integer -> Integer) -> String
test (+) = "plus"
test (-) = "minus"
test _ = "other"
还有其他方法可以完成我想做的事情。我只是好奇为什么这不起作用。
【问题讨论】:
-
您的第一行匹配任何函数并将其本地绑定到中缀运算符 +。因此,后续行超出了要求,因此发出警告。请注意,函数符号,无论是否中缀,都可以通过这种方式通过模式匹配在本地反弹。只有大写的构造函数(或:前缀的中缀构造函数)和文字只匹配它们自己,然后只匹配一阶类型。 Haskell(几乎)没有办法检查函数的内涵属性:(除了seq)你只能通过应用它们来利用它们的外延属性。 “这是+功能吗?”不允许。
-
@pigworker,这解释了为什么我收到“此绑定掩盖了现有的前奏定义”消息。谢谢你的信息。