scalabook

Форк
0
/
semigroupal.md 
60 строк · 1.7 Кб

Semigroupal

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

Semigroupal

- это класс типов, который позволяет комбинировать контексты. Если есть два объекта типа F[A]
и F[B]
, Semigroupal[F]
позволяет объединить их для формирования объекта F[(A, B)]
: product: (F[A], F[B]) => F[(A, B)]
(также встречается название операции tuple2
).

Semigroupal

должен удовлетворять следующим законам:

  • ассоциативность: product(a, product(b, c)) == product(product(a, b), c)

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

trait Semigroupal[F[_]]:
def product[A, B](fa: F[A], fb: F[B]): F[(A, B)]

Примеры

"Обертка"

import cats.Id
given Semigroupal[Id] with
override def product[A, B](fa: Id[A], fb: Id[B]): Id[(A, B)] = Id((fa, fb))

Option

given Semigroupal[Option] with
override def product[A, B](fa: Option[A], fb: Option[B]): Option[(A, B)] =
(fa, fb) match
case (Some(a), Some(b)) => Some((a, b))
case _ => None

Реализация

Реализация в Cats

import cats.Semigroupal
import cats.instances.option.*
Semigroupal[Option].product(Some(123), Some("abc")) // Some((123,abc))
Semigroupal.tuple3(Option(1), Option(2), Option(3)) // Some((1,2,3))

Ссылки:

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

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

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

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