Scala 具有一个逆变和一个协变参数的双函子类型类的名称

Scala 具有一个逆变和一个协变参数的双函子类型类的名称,scala,haskell,functional-programming,typeclass,scala-cats,Scala,Haskell,Functional Programming,Typeclass,Scala Cats,我想看看是否有一个双函子的标准类型类,它有一个逆变参数和一个协变参数 打孔签名(c->a)->(b->d)->f a b->f c d不会产生匹配的结果 基本上在Scala中,我希望做: trait CoContraBiFunctor[F[_, _]] { def ccmap[A, B, C, D](fab: F[A, B])(f: C => A)(g: B => D): F[C, D] } implicit val ccFunction: CoContraBiFunctor[

我想看看是否有一个双函子的标准类型类,它有一个逆变参数和一个协变参数

打孔签名
(c->a)->(b->d)->f a b->f c d
不会产生匹配的结果

基本上在Scala中,我希望做:

trait CoContraBiFunctor[F[_, _]] {
  def ccmap[A, B, C, D](fab: F[A, B])(f: C => A)(g: B => 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 => A)(g: B => D): Function[C, D] = new Function[C, D] {
    override def apply(c: C): D = g(fab(f(c)))
  }
}

有人有主意吗?我肯定不是第一个找这个的人。

这叫profunctor!它是一个到处都能看到的东西(例如,)!在Haskell中,它作为
profunctors
包中的
Data.Profunctor
提供。我不是Scala人,但它看起来也在《猫》中。

谢谢你,我知道我以前听过,但我记不起专业镜头:一些有用的链接是(对于纯profunctor镜头)和(对于van Laarhoven镜头)。特别是最后一张图表让我觉得教授们“点击”,但它们都是引人入胜的读物。你在哪里“打签名”。有趣的是,有,他们都给不同的结果!只有
hoogle.haskell.org
为您的查询提供结果:-/