<p>This is called a <em>profunctor</em>! It is a <a href="http://blog.sigfpe.com/2011/07/profunctors-in-haskell.html" rel="noreferrer">very useful type of bifunctor</a> that shows up all over the place (for example, <a href="https://arxiv.org/ftp/arxiv/papers/1703/1703.10857.pdf" rel="noreferrer">in the construction of lenses</a>)! In Haskell it is available as <code>Data.Profunctor</code> in the <code>profunctors</code> package. I am not a Scala person but it looks like it is <a href="https://typelevel.org/cats/api/cats/arrow/Profunctor.html" rel="noreferrer">available</a> in <code>cats</code> as well.</p>
Name of Bi - Functor type class with one contravariant and one covariant parameter
<p>I'm looking to see if there is a standard typeclass for a Bi-Functor that has one Contravariant parameter and one Covariant parameter.</p>

<p>punching the signature <code>(c -&gt; a) -&gt; (b -&gt; d) -&gt; f a b -&gt; f c d</code> results in nothing that matches.</p>

<p>Basically in Scala I'm looking to do:</p>

<pre><code>trait CoContraBiFunctor[F[_, _]] {
  def ccmap[A, B, C, D](fab: F[A, B])(f: C =&gt; A)(g: B =&gt; D): F[C, D]
}

implicit val ccFunction: CoContraBiFunctor[Function1] = new CoContraBiFunctor[Function] {
  override def ccmap[A, B, C, D](fab: Function[A, B])(f: C =&gt; A)(g: B =&gt; D): Function[C, D] = new Function[C, D] {
    override def apply(c: C): D = g(fab(f(c)))
  }
}
</code></pre>

<p>Anyone have an idea?  I definitely am not the first person to look for this.</p>