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

kits.std.Set.scala Maven / Gradle / Ivy

The newest version!
package kits

package std

trait SetFunctor extends Functor[Set] {

  override final def map[A, B](fa: Set[A])(f: A => B): Set[B] = fa.map(f)

}

trait SetMonadPlus extends MonadPlus[Set] { self: SetFunctor =>

  override final def zero[A]: Set[A] = Set.empty

  override final def pure[A](a: A): Set[A] = Set(a)

  override final def plus[A](x: Set[A], y: Set[A]): Set[A] = x ++ y

  override final def filter[A](fa: Set[A])(p: A => Boolean): Set[A] = fa.filter(p)

  override final def flatMap[A, B](fa: Set[A])(f: A => Set[B]): Set[B] = fa.flatMap(f)

  override final def flatten[A](ffa: Set[Set[A]]): Set[A] = ffa.flatten

}

trait SetTraverse extends Traverse[Set] { self: SetFunctor =>

  override final def traverse[F[_], A, B](fa: Set[A])(f: A => F[B])(implicit F: Applicative[F]): F[Set[B]] =
    fa.foldLeft(F.pure(Set.empty[B]))((ga, a) => F.map2(ga, f(a))(_ + _))

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy