import Data.Vect %unbound_implicits off append : forall n, m, a . Vect n a -> Vect m a -> Vect (n + m) a append [] ys = ys append (x :: xs) ys = x :: append xs ys data Env : forall n . Vect n Type -> Type where ENil : Env [] ECons : forall t, ts . t -> Env ts -> Env (t :: ts) -- fine because the only name used in bound, and it'll infer types for -- xs and its indices len : forall xs . Env xs -> Nat -- neither of these are fine len': Env xs -> Nat append' : Vect n a -> Vect m a -> Vect (n + m) a