Имя класса типа Bi - функтор с одним контравариантным и одним ковариантным параметром - PullRequest
0 голосов
/ 14 февраля 2019

Я смотрю, есть ли стандартный класс типов для би-функтора, который имеет один параметр 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)))
  }
}

У кого-нибудь есть идея?Я определенно не первый человек, который ищет это.

1 Ответ

0 голосов
/ 14 февраля 2019

Это называется profunctor !Это очень полезный тип бифунктора , который появляется повсюду (например, в конструкции линз )!В Haskell он доступен как Data.Profunctor в пакете profunctors.Я не Scala, но похоже, что он доступен в cats.

...