I'm working on arrow library for scalaI've come with some new typeclass, which looks like generalized Functortrait Project[F[_]] extends Functor[F]{  def project[=>:[_,_], A, B](f: A =>: B)(implicit ar: ArrowChoice[=>:]): F[A] =>: F[B]  def map[A, B](fa: F[A])(f: A => B): F[B] = project[Function1, A, B](f).apply(fa)}where ArrowChoice is subtype of Arrowexample of such typeclass instance could be implicit def validationProject[E] = new Project[Validation[E, ?]] {  def project[=>:[_, _], A, B](f: A =>: B)(implicit ar: ArrowChoice[=>:]): Validation[E, A] =>: Validation[E, B] =    (ar.id[E] +++ f).dimap(_.disjunction, _.validation)}However I have some doubt about such definition:Is name Project is clear enough? Isn't it confusing or dissonating for potential user? Could it be that similar things were already discussed in some blogs or category theory and have some known label?Is extending Functor a good idea? In following example we have already Functor for Validation[E, ?] defined here. Should I bother they could conflict if user will import too much?
Stronger Functor TypeClass
scala;scalaz