Bi的名称 - 具有一个逆变量和一个协变参数的Functor类型类

Nig*_*nns 10 haskell functional-programming scala typeclass scala-cats

我正在寻找一个Bi-Functor的标准类型类,它有一个Contravariant参数和一个Covariant参数.

打孔签名会(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)))
  }
}
Run Code Online (Sandbox Code Playgroud)

有人有想法吗?我绝对不是第一个寻找这个的人.

Rei*_*chs 11

这被称为profunctor!它是一种非常有用的双分子式,可以显示在整个地方(例如,在镜片的构造中)!在Haskell中,它可以Data.Profunctor在profunctors包中找到.我不是一个人的Scala,但它看起来是可用的cats为好.