adding CoFunctor, names for type1, type2, etc.