Sono riuscito a costruire il seguente esempio "minimale" che mostra il mio problema.I sinonimi di pattern portano a pattern matching non esaustivo
fornito estensione delle PatternSynonyms è abilitato
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
Ho ricevuto un avviso per la funzione f dicendo
Warning: Pattern match(es) are non-exhaustive
In an equation for `f': Patterns not matched: (_, _)
Se ho sostituito ogni Ve
con Vec
non si lamenterebbe. Come può il mio singolare pattern sinonimo interferire qui?
Sono sicuro che ci sono cose che non ho considerato, ma sembra piuttosto strano che questo non funzioni. Avrei pensato che una semplice espansione macro sarebbe stata sufficiente per sinonimi di qualsiasi tipo. Non vedere come ciò interferirebbe con i controlli di esaustività. Grazie per il link. –
@Luka Non è che sia impossibile, ma qualcuno deve fare il lavoro. I sinonimi di pattern sono uno sforzo totalmente volontario. E tu sei libero di contribuire con un correttore di pattern migliorato, ovviamente. :) – augustss