Подтвердить что ты не робот

Синонимы шаблонов приводят к нечеткому сопоставлению шаблонов

Мне удалось создать следующий "минимальный" пример, который показывает мою проблему.

При условии, что расширение PatternSynonyms включено

data Vec = Vec Int Int

pattern Ve x y = Vec x y

f :: (Vec, Vec) -> Vec
f ([email protected](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, он не стал бы жаловаться. Как здесь вмешивается мой синхронный синоним?

4b9b3361

Ответ 1

Он еще не реализован, см. # 8779. Я не ожидаю, что здесь, но я знаю, что проверки полноты трудно реализовать во многих случаях, таких как GADT или охранники. Вероятно, это проблематично и для синонимов шаблонов.