All Downloads are FREE. Search and download functionalities are using the official Maven repository.

japgolly.nyaya.util.package.scala Maven / Gradle / Ivy

package japgolly.nyaya

import japgolly.nyaya.util.MultiValues.Commutative

package object util {

  implicit object ListMultiValues extends MultiValues[List] {
    override def empty  [A]                                     = List.empty[A]
    override def add1   [A]  (a: List[A], b: A)                 = b :: a
    override def del1   [A]  (a: List[A], b: A)                 = a.filterNot(_ == b)
    override def addn   [A]  (a: List[A], b: List[A])           = b ::: a
    override def deln   [A]  (a: List[A], b: List[A])           = {val s = b.toSet; a filterNot s.contains}
    override def foldl  [A,B](a: A, b: List[B])(f: (A, B) => A) = b.foldLeft(a)(f)
    override def foldr  [A,B](a: A, b: List[B])(f: (A, B) => A) = b.foldRight(a)((x, y) => f(y, x))
    override def stream [A]  (a: List[A])                       = a.toStream
    override def isEmpty[A]  (a: List[A])                       = a.isEmpty
  }

  implicit object SetMultiValues extends MultiValues[Set] with Commutative[Set] {
    override def empty  [A]                                    = Set.empty[A]
    override def add1   [A]  (a: Set[A], b: A)                 = a + b
    override def del1   [A]  (a: Set[A], b: A)                 = a - b
    override def addn   [A]  (a: Set[A], b: Set[A])            = a ++ b
    override def deln   [A]  (a: Set[A], b: Set[A])            = a -- b
    override def foldl  [A,B](a: A, b: Set[B])(f: (A, B) => A) = b.foldLeft(a)(f)
    override def foldr  [A,B](a: A, b: Set[B])(f: (A, B) => A) = b.foldRight(a)((x, y) => f(y, x))
    override def stream [A]  (a: Set[A])                       = a.toStream
    override def isEmpty[A]  (a: Set[A])                       = a.isEmpty
  }

  implicit object VectorMultiValues extends MultiValues[Vector] {
    override def empty  [A]                                       = Vector.empty[A]
    override def add1   [A]  (a: Vector[A], b: A)                 = a :+ b
    override def del1   [A]  (a: Vector[A], b: A)                 = a.filterNot(_ == b)
    override def addn   [A]  (a: Vector[A], b: Vector[A])         = a ++ b
    override def deln   [A]  (a: Vector[A], b: Vector[A])         = {val s = b.toSet; a filterNot s.contains}
    override def foldl  [A,B](a: A, b: Vector[B])(f: (A, B) => A) = b.foldLeft(a)(f)
    override def foldr  [A,B](a: A, b: Vector[B])(f: (A, B) => A) = b.foldRight(a)((x, y) => f(y, x))
    override def stream [A]  (a: Vector[A])                       = a.toStream
    override def isEmpty[A]  (a: Vector[A])                       = a.isEmpty
  }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy