1{-# LANGUAGE PatternSynonyms #-} 2{-# LANGUAGE NamedFieldPuns #-} 3 4pattern Arrow t1 t2 = App "->" [t1, t2] 5pattern Arrow{t1,t2} = App "->" [t1,t2] 6pattern Arrow{t1 7 , t2} = App "->" [t1, t2] 8pattern Int = 9 App "Int" [] 10pattern Maybe{t} = 11 App 12 "Maybe" 13 [t] 14pattern Maybe t = 15 App 16 "Maybe" 17 [t] 18 19pattern a :< b <- 20 (a , b) 21