14

我设法构建了以下显示我的问题的“最小”示例。

如果启用了 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不会抱怨了。我的奇异模式同义词如何干扰这里?

4

1 回答 1

13

它尚未实现,请参阅#8779。我在这里不是一个期望,但我知道在很多情况下很难实施详尽的检查,比如 GADT 或警卫。模式同义词可能也有问题。

于 2014-11-21T19:56:54.217 回答