我设法构建了以下显示我的问题的“最小”示例。
如果启用了 PatternSynonyms 扩展
data Vec = Vec Int Int
pattern Ve x y = Vec x y
f :: (Vec, Vec) -> Vec
f (v@(Ve a b), Ve c d)
| a > b = Vec c d
| otherwise = v
我收到函数 f 的警告说
Warning: Pattern match(es) are non-exhaustive
In an equation for `f': Patterns not matched: (_, _)
如果我把每一个都换成Ve
它就Vec
不会抱怨了。我的奇异模式同义词如何干扰这里?