我设法构建以下" minimal"显示我的问题的例子。
如果启用了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
,它就不会抱怨。
我的单一模式同义词如何干扰这里?