Split
Формальное определение
Split
- полугруппоид (Compose
), допускающий произведения.
Split
должен удовлетворять законам Compose
.
Определение в виде кода на Scala
trait Split[=>:[_, _]] extends Compose[=>:]:
def split[A, B, C, D](f: A =>: B, g: C =>: D): (A, C) =>: (B, D)
Примеры
Функция от одной переменной
object Split:
given Split[Function1] with
override def compose[A, B, C](f: B => C, g: A => B): A => C = g andThen f
override def split[A, B, C, D](f: A => B, g: C => D): ((A, C)) => (B, D) =
(a, c) => (f(a), g(c))
Реализация
Реализация в Cats
import cats.*, cats.data.*, cats.syntax.all.*
lazy val f = (_:Int) + 1
lazy val g = (_:Int) * 100
(f split g)((1, 1))
// res0: (Int, Int) = (2, 100)
Реализация в ScalaZ
import scalaz.*
import Scalaz.*
// ... Все операции родителей
Ссылки: