scalabook

Форк
0
45 строк · 1.3 Кб

Divide

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

Divide

- контравариантный аналог Apply
. Он расширяет ковариантный функтор и дополнительно реализует операцию divide
: def divide[A, B, C](fa: => F[A], fb: => F[B])(f: C => (A, B)): F[C]

Законы Divide

:

  • Composition (композиция): divide(divide(fa1, fa2)(delta), fa3)(delta) == divide(fa1, divide(fa2, fa3)(delta))(delta)
    , где delta: A => (A, A) = a => (a, a)

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

trait Divide[F[_]] extends ContravariantFunctor[F]:
def divide[A, B, C](fa: => F[A], fb: => F[B])(f: C => (A, B)): F[C]
def tuple2[A, B](fa: => F[A], fb: => F[B]): F[(A, B)] = divide(fa, fb)(identity)

Примеры

Унарная функция

given functionDivide[R: Monoid]: Divide[[X] =>> Function1[X, R]] with
override def cmap[A, B](function: B => R)(f: A => B): A => R =
a => function(f(a))
override def divide[A, B, C](fa: => A => R, fb: => B => R)(f: C => (A, B)): C => R =
c => {
val (a, b) = f(c)
summon[Monoid[R]].combine(fa(a), fb(b))
}

Ссылки:

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.