scalabook

Форк
0
/
divisible.md 
46 строк · 1.2 Кб

Divisible

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

Divisible

- контравариантный аналог Applicative
. Он расширяет Divide
и InvariantApplicative
.

Законы Divisible

:

  • right identity: divide(fa, conquer)(delta) == fa
    , где delta: A => (A, A) = a => (a, a)
  • left identity: divide(conquer, fa)(delta) == fa

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

trait Divisible[F[_]] extends Divide[F], InvariantApplicative[F]:
def conquer[A]: F[A]
override def xunit0[A](a: => A): F[A] = conquer
override def cmap[A, B](fb: F[B])(f: A => B): F[A] =
divide(conquer[Unit], fb)(c => ((), f(c)))

Примеры

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

given functionDivisible[R: Monoid]: Divisible[[X] =>> Function1[X, R]] with
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))
}
override def conquer[A]: A => R = _ => summon[Monoid[R]].empty

Ссылки:

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

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

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

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