Sinônimos de Padrão

De [1] “Este patch implementa sinônimos de padrão (habilitado por -XPatternSynonyms), permitindo que você atribua nomes a um padrão e abstraia sobre ele.”

Dado

data Type = App String [Type]

você teve que escrever algo como

collectArgs (App "->" [t1, t2]) = t1 : collectArgs t2

Com sinônimos de padrão como

pattern Arrow t1 t2 = App "->" [t1, t2]

agora você pode escrever

collectArgs (Arrow t1 t2) = t1 : collectArgs t2

Mais informações em [2]

[1] http://www.haskell.org/pipermail/ghc-commits/2014-January/005722.html

[2] https://ghc.haskell.org/trac/ghc/wiki/PatternSynonyms