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