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.implicits._ 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)
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.implicits._ 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)
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.
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.implicits._ 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())
"Flatten" out a structure by collapsing Option
s.
"Flatten" out a structure by collapsing Option
s.
Equivalent to using mapFilter
with identity
.
Example:
scala> import cats.implicits._ scala> val l: List[Option[Int]] = List(Some(1), None, Some(3), None) scala> l.flattenOption res0: List[Int] = List(1, 3)
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.implicits._ 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(i => m.get(i)) res0: List[String] = List(one, three)
TraverseFilter
, also known asWitherable
, represents list-like structures that can essentially have atraverse
and afilter
applied as a single combined operation (traverseFilter
).Based on Haskell's Data.Witherable