2 | import public Data.Vect
8 | Fun : Vect n Type -> Type -> Type
10 | Fun (t::ts) r = t -> Fun ts r
13 | chain : {ts : Vect n Type} -> Fun [r] r' -> Fun ts r -> Fun ts r'
14 | chain {ts = []} g r = g r
15 | chain {ts = (_::_)} g f = \ x => chain g (f x)
18 | [Nary] {ts : Vect n Type} -> Functor (Fun ts) where
23 | target : {ts : Vect n Type} -> {r: Type} -> Fun ts r -> Type