TraverseFilter

cats.TraverseFilter
See theTraverseFilter companion object
trait TraverseFilter[F[_]] extends FunctorFilter[F]

TraverseFilter, also known as Witherable, represents list-like structures that can essentially have a traverse and a filter applied as a single combined operation (traverseFilter).

Based on Haskell's Data.Witherable

Attributes

Companion
object
Source
TraverseFilter.scala
Graph
Supertypes
trait FunctorFilter[F]
trait Serializable
class Object
trait Matchable
class Any

Members list

Value members

Abstract methods

def traverse: Traverse[F]

Attributes

Source
TraverseFilter.scala
def traverseFilter[G[_], A, B](fa: F[A])(f: A => G[Option[B]])(implicit G: Applicative[G]): G[F[B]]

A combined traverse and filter.

A combined traverse and filter. Filtering is handled via Option instead of Boolean such that the output type B can be different than the input type A.

Example:

scala> import cats.syntax.all._
scala> val m: Map[Int, String] = Map(1 -> "one", 3 -> "three")
scala> val l: List[Int] = List(1, 2, 3, 4)
scala> def asString(i: Int): Eval[Option[String]] = Now(m.get(i))
scala> val result: Eval[List[String]] = l.traverseFilter(asString)
scala> result.value
res0: List[String] = List(one, three)

Attributes

Source
TraverseFilter.scala

Concrete methods

def filterA[G[_], A](fa: F[A])(f: A => G[Boolean])(implicit G: Applicative[G]): G[F[A]]

Filter values inside a G context.

Filter values inside a G context.

This is a generalized version of Haskell's filterM. This StackOverflow question about filterM may be helpful in understanding how it behaves.

Example:

scala> import cats.syntax.all._
scala> val l: List[Int] = List(1, 2, 3, 4)
scala> def odd(i: Int): Eval[Boolean] = Now(i % 2 == 1)
scala> val res: Eval[List[Int]] = l.filterA(odd)
scala> res.value
res0: List[Int] = List(1, 3)

scala> List(1, 2, 3).filterA(_ => List(true, false))
res1: List[List[Int]] = List(List(1, 2, 3), List(1, 2), List(1, 3), List(1), List(2, 3), List(2), List(3), List())

Attributes

Source
TraverseFilter.scala
final override def functor: Functor[F]

Attributes

Definition Classes
Source
TraverseFilter.scala
def hashDistinct[A](fa: F[A])(implicit H: Hash[A]): F[A]

Removes duplicate elements from a list, keeping only the first occurrence.

Removes duplicate elements from a list, keeping only the first occurrence. This is usually faster than ordDistinct, especially for things that have a slow comparion (like String).

Attributes

Source
TraverseFilter.scala
override def mapFilter[A, B](fa: F[A])(f: A => Option[B]): F[B]

A combined map and filter.

A combined map and filter. Filtering is handled via Option instead of Boolean such that the output type B can be different than the input type A.

Example:

scala> import cats.syntax.all._
scala> val m: Map[Int, String] = Map(1 -> "one", 3 -> "three")
scala> val l: List[Int] = List(1, 2, 3, 4)
scala> def asString(i: Int): Option[String] = m.get(i)
scala> l.mapFilter(asString)
res0: List[String] = List(one, three)

Attributes

Definition Classes
Source
TraverseFilter.scala
def ordDistinct[A](fa: F[A])(implicit O: Order[A]): F[A]

Removes duplicate elements from a list, keeping only the first occurrence.

Removes duplicate elements from a list, keeping only the first occurrence.

Attributes

Source
TraverseFilter.scala
def sequenceFilter[G[_], A](fgoa: F[G[Option[A]]])(implicit G: Applicative[G]): G[F[A]]

scala> import cats.syntax.all._
scala> val a: List[Either[String, Option[Int]]] = List(Right(Some(1)), Right(Some(5)), Right(Some(3)))
scala> val b: Either[String, List[Int]] = TraverseFilter[List].sequenceFilter(a)
b: Either[String, List[Int]] = Right(List(1, 5, 3))

Attributes

Source
TraverseFilter.scala
def traverseCollect[G[_], A, B](fa: F[A])(f: PartialFunction[A, G[B]])(implicit G: Applicative[G]): G[F[B]]

A combined traverse and collect.

A combined traverse and collect.

scala> import cats.syntax.all._ scala> val m: Map[Int, String] = Map(1 -> "one", 2 -> "two") scala> val l: List[Int] = List(1, 2, 3, 4) scala> def asString: PartialFunction[Int, Eval[Option[String]]] = { case n if n % 2 == 0 => Now(m.get(n)) } scala> val result: Eval[List[Option[String]]] = l.traverseCollect(asString) scala> result.value res0: List[Option[String]] = List(Some(two), None)

Attributes

Source
TraverseFilter.scala
def traverseEither[G[_], A, B, E](fa: F[A])(f: A => G[Either[E, B]])(g: (A, E) => G[Unit])(implicit G: Monad[G]): G[F[B]]

Like traverseFilter, but uses Either instead of Option and allows for an action to be run on each filtered value.

Like traverseFilter, but uses Either instead of Option and allows for an action to be run on each filtered value.

Attributes

Source
TraverseFilter.scala

Inherited methods

def collect[A, B](fa: F[A])(f: PartialFunction[A, B]): F[B]

Similar to mapFilter but uses a partial function instead of a function that returns an Option.

Similar to mapFilter but uses a partial function instead of a function that returns an Option.

Example:

scala> import cats.syntax.all._
scala> val l: List[Int] = List(1, 2, 3, 4)
scala> FunctorFilter[List].collect(l){
    |   case 1 => "one"
    |   case 3 => "three"
    | }
res0: List[String] = List(one, three)

Attributes

Inherited from:
FunctorFilter
Source
FunctorFilter.scala
def filter[A](fa: F[A])(f: A => Boolean): F[A]

Apply a filter to a structure such that the output structure contains all A elements in the input structure that satisfy the predicate f but none that don't.

Apply a filter to a structure such that the output structure contains all A elements in the input structure that satisfy the predicate f but none that don't.

Attributes

Inherited from:
FunctorFilter
Source
FunctorFilter.scala
def filterNot[A](fa: F[A])(f: A => Boolean): F[A]

Apply a filter to a structure such that the output structure contains all A elements in the input structure that do not satisfy the predicate f.

Apply a filter to a structure such that the output structure contains all A elements in the input structure that do not satisfy the predicate f.

Attributes

Inherited from:
FunctorFilter
Source
FunctorFilter.scala
def flattenOption[A](fa: F[Option[A]]): F[A]

"Flatten" out a structure by collapsing Options.

"Flatten" out a structure by collapsing Options. Equivalent to using mapFilter with identity.

Example:

scala> import cats.syntax.all._
scala> val l: List[Option[Int]] = List(Some(1), None, Some(3), None)
scala> l.flattenOption
res0: List[Int] = List(1, 3)

Attributes

Inherited from:
FunctorFilter
Source
FunctorFilter.scala