data Nat : Type where Z : Nat S : Nat -> Nat data Vect : Nat -> Type -> Type where Nil : Vect Z $a Cons : $a -> Vect $k $a -> Vect (S $k) $a plus : Nat -> Nat -> Nat plus Z $y = y plus (S $k) $y = S (plus k y) append : Vect $n $a -> Vect $m $a -> Vect (plus $n $m) $a append Nil $ys = ys append (Cons $x $xs) $ys = Cons x ?foo