Invariant Applicative

Формальное определение

Инвариантный Applicative поддерживает операции xunit0, xunit1 и т.д., которые "оборачивают" тип в инвариантный функтор. InvariantApplicative расширяет InvariantFunctor.

Используется для получения класса типов продуктов и типов значений.

Определение в виде кода на Scala

trait InvariantFunctor[F[_]]:
  extension [A](fa: F[A]) def xmap[B](f: A => B, g: B => A): F[B]

trait InvariantApplicative[F[_]] extends InvariantFunctor[F]:
  def xunit0[A](a: => A): F[A]

  extension [A](fa: => F[A])
    def xunit1[B](f: A => B, g: B => A): F[B] =
      fa.xmap(f, g)

Ссылки: