import public Data.Vect
import public Data.Vect.Utils
import public Data.Vect.Quantifiers0 ImplCat : Vect (2 + n) obj -> TypeRunCat : Category arr => (p : Vect (2 + n) obj) -> ImplCat p -> arr (head p) (last p)interface CoprodStrength : Monoid a -> (a -> Type) -> TypeCoprodStrength EitherMon (\x => x)CoprodStrength AnyMon OneOfleft : CoprodStrength mon f => f x -> f (x <+> y)right : CoprodStrength mon f => f y -> f (x <+> y)MkInst : {auto mon : Monoid gr} -> CoprodStrength mon f => GradedCat mon (GradedCoproductMonad f)foldGrades : Monoid gr => Vect (S n) gr -> gr0 ImplGr : Vect (2 + n) obj -> Vect (S n) gr -> TypeRunGrCat : {auto mon : Monoid gr} -> GradedCat mon arr -> (p : Vect (2 + n) obj) -> (grades : Vect (S n) gr) -> ImplGr p grades -> arr (foldGrades grades) (head p) (last p)