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