Мне удалось создать следующий "минимальный" пример, который показывает мою проблему.
При условии, что расширение 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
, он не стал бы жаловаться.
Как здесь вмешивается мой синхронный синоним?