module TypeAlias; type T := t : T; type T2 := t2 : T2; alias : Type := T; x : alias := t; id : Type → Type | x := x; syntax fixity composition := binary {assoc := right}; syntax operator ⊙ composition; ⊙ : (Type → Type) → (Type → Type) → Type → Type | f g x := f (g x); x2 : (id ⊙ id) alias := t; flip : (Type → Type → Type) → id Type → Type → (id ⊙ id) Type | f a b := f b a; type Pair (A : Type) (B : Type) := mkPair : id T → id (id A) → B → Pair A B; p : {A : Type} → A → Pair A A | a := mkPair t a a; x' : flip Pair (id _) T2 := mkPair x t2 t; funAlias : Type -> Type | a := a -> a; f : funAlias T := \ {t := t}; f' : funAlias T | t := t;