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

Luk*_*vat 13 haskell pattern-matching pattern-synonyms

我设法构建了以下显示我的问题的"最小"示例.

如果启用了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
Run Code Online (Sandbox Code Playgroud)

我得到了f函数的警告

  Warning: Pattern match(es) are non-exhaustive
  In an equation for `f': Patterns not matched: (_, _)
Run Code Online (Sandbox Code Playgroud)

如果我VeVec它替换每一个都不会抱怨.我的奇异模式同义词如何干扰这里?

Yur*_*ras 12

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

  • @Luka这不是不可能的,但有人必须做这项工作.模式同义词完全是志愿者的努力.当然,您可以自由地提供改进的模式检查器.:) (3认同)