模式同义词会导致不详尽的模式匹配



我已经设法构建了以下"最小"示例来显示我的问题。

前提是启用了模式同义词扩展

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 或警卫。模式同义词可能也有问题。

最新更新