模式同义词导致无穷无尽的模式匹配

时间:2014-11-21 19:43:28

标签: haskell pattern-matching pattern-synonyms

我设法构建以下" 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,它就不会抱怨。 我的单一模式同义词如何干扰这里?

1 个答案:

答案 0 :(得分:12)

尚未实施,请参阅#8779。我不希望这里,但我知道详尽的检查很难在很多情况下实施,比如GADT或警卫。也许模式同义词也存在问题。