我已经设法构建了以下"最小"示例来显示我的问题。
前提是启用了模式同义词扩展
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: (_, _)
如果我用Vec
替换每个Ve
,它就不会抱怨。我的单数模式同义词在这里如何干扰?
尚未实现,请参见#8779。我在这里不是一个期望,但我知道在很多情况下很难实施详尽性检查,比如 GADT 或警卫。模式同义词可能也有问题。