Foldable

cats.Foldable
See theFoldable companion object
trait Foldable[F[_]] extends UnorderedFoldable[F], FoldableNFunctions[F]

Data structures that can be folded to a summary value.

In the case of a collection (such as List or Vector), these methods will fold together (combine) the values contained in the collection to produce a single result. Most collection types have foldLeft methods, which will usually be used by the associated Foldable[_] instance.

Instances of Foldable should be ordered collections to allow for consistent folding. Use the UnorderedFoldable type class if you want to fold over unordered collections.

Foldable[F] is implemented in terms of two basic methods:

- foldLeft(fa, b)(f) eagerly folds fa from left-to-right. - foldRight(fa, b)(f) lazily folds fa from right-to-left.

Beyond these it provides many other useful methods related to folding over F[A] values.

See: A tutorial on the universality and expressiveness of fold

Attributes

Companion
object
Source
Foldable.scala
Graph
Supertypes
trait Serializable
class Object
trait Matchable
class Any
Show all
Known subtypes
trait Reducible[F]
class NonEmptyReducible[F, G]
trait NonEmptyTraverse[F]
trait Traverse[F]
Self type

Members list

Grouped members

FoldableSlidingN

def sliding10[A](fa: F[A]): List[(A, A, A, A, A, A, A, A, A, A)]

Attributes

Inherited from:
FoldableNFunctions
Source
FoldableNFunctions.scala
def sliding11[A](fa: F[A]): List[(A, A, A, A, A, A, A, A, A, A, A)]

Attributes

Inherited from:
FoldableNFunctions
Source
FoldableNFunctions.scala
def sliding12[A](fa: F[A]): List[(A, A, A, A, A, A, A, A, A, A, A, A)]

Attributes

Inherited from:
FoldableNFunctions
Source
FoldableNFunctions.scala
def sliding13[A](fa: F[A]): List[(A, A, A, A, A, A, A, A, A, A, A, A, A)]

Attributes

Inherited from:
FoldableNFunctions
Source
FoldableNFunctions.scala
def sliding14[A](fa: F[A]): List[(A, A, A, A, A, A, A, A, A, A, A, A, A, A)]

Attributes

Inherited from:
FoldableNFunctions
Source
FoldableNFunctions.scala
def sliding15[A](fa: F[A]): List[(A, A, A, A, A, A, A, A, A, A, A, A, A, A, A)]

Attributes

Inherited from:
FoldableNFunctions
Source
FoldableNFunctions.scala
def sliding16[A](fa: F[A]): List[(A, A, A, A, A, A, A, A, A, A, A, A, A, A, A, A)]

Attributes

Inherited from:
FoldableNFunctions
Source
FoldableNFunctions.scala
def sliding17[A](fa: F[A]): List[(A, A, A, A, A, A, A, A, A, A, A, A, A, A, A, A, A)]

Attributes

Inherited from:
FoldableNFunctions
Source
FoldableNFunctions.scala
def sliding18[A](fa: F[A]): List[(A, A, A, A, A, A, A, A, A, A, A, A, A, A, A, A, A, A)]

Attributes

Inherited from:
FoldableNFunctions
Source
FoldableNFunctions.scala
def sliding19[A](fa: F[A]): List[(A, A, A, A, A, A, A, A, A, A, A, A, A, A, A, A, A, A, A)]

Attributes

Inherited from:
FoldableNFunctions
Source
FoldableNFunctions.scala
def sliding2[A](fa: F[A]): List[(A, A)]

Attributes

Inherited from:
FoldableNFunctions
Source
FoldableNFunctions.scala
def sliding20[A](fa: F[A]): List[(A, A, A, A, A, A, A, A, A, A, A, A, A, A, A, A, A, A, A, A)]

Attributes

Inherited from:
FoldableNFunctions
Source
FoldableNFunctions.scala
def sliding21[A](fa: F[A]): List[(A, A, A, A, A, A, A, A, A, A, A, A, A, A, A, A, A, A, A, A, A)]

Attributes

Inherited from:
FoldableNFunctions
Source
FoldableNFunctions.scala
def sliding22[A](fa: F[A]): List[(A, A, A, A, A, A, A, A, A, A, A, A, A, A, A, A, A, A, A, A, A, A)]

Attributes

Inherited from:
FoldableNFunctions
Source
FoldableNFunctions.scala
def sliding3[A](fa: F[A]): List[(A, A, A)]

Attributes

Inherited from:
FoldableNFunctions
Source
FoldableNFunctions.scala
def sliding4[A](fa: F[A]): List[(A, A, A, A)]

Attributes

Inherited from:
FoldableNFunctions
Source
FoldableNFunctions.scala
def sliding5[A](fa: F[A]): List[(A, A, A, A, A)]

Attributes

Inherited from:
FoldableNFunctions
Source
FoldableNFunctions.scala
def sliding6[A](fa: F[A]): List[(A, A, A, A, A, A)]

Attributes

Inherited from:
FoldableNFunctions
Source
FoldableNFunctions.scala
def sliding7[A](fa: F[A]): List[(A, A, A, A, A, A, A)]

Attributes

Inherited from:
FoldableNFunctions
Source
FoldableNFunctions.scala
def sliding8[A](fa: F[A]): List[(A, A, A, A, A, A, A, A)]

Attributes

Inherited from:
FoldableNFunctions
Source
FoldableNFunctions.scala
def sliding9[A](fa: F[A]): List[(A, A, A, A, A, A, A, A, A)]

Attributes

Inherited from:
FoldableNFunctions
Source
FoldableNFunctions.scala

Value members

Abstract methods

def foldLeft[A, B](fa: F[A], b: B)(f: (B, A) => B): B

Left associative fold on 'F' using the function 'f'.

Left associative fold on 'F' using the function 'f'.

Example:

scala> import cats.Foldable, cats.implicits._
scala> val fa = Option(1)

Folding by addition to zero:
scala> Foldable[Option].foldLeft(fa, Option(0))((a, n) => a.map(_ + n))
res0: Option[Int] = Some(1)

With syntax extensions, foldLeft can be used like:

Folding `Option` with addition from zero:
scala> fa.foldLeft(Option(0))((a, n) => a.map(_ + n))
res1: Option[Int] = Some(1)

There's also an alias `foldl` which is equivalent:
scala> fa.foldl(Option(0))((a, n) => a.map(_ + n))
res2: Option[Int] = Some(1)

Attributes

Source
Foldable.scala
def foldRight[A, B](fa: F[A], lb: Eval[B])(f: (A, Eval[B]) => Eval[B]): Eval[B]

Right associative lazy fold on F using the folding function 'f'.

Right associative lazy fold on F using the folding function 'f'.

This method evaluates lb lazily (in some cases it will not be needed), and returns a lazy value. We are using (A, Eval[B]) => Eval[B] to support laziness in a stack-safe way. Chained computation should be performed via .map and .flatMap.

For more detailed information about how this method works see the documentation for Eval[_].

Example:

scala> import cats.Foldable, cats.Eval, cats.implicits._
scala> val fa = Option(1)

Folding by addition to zero:
scala> val folded1 = Foldable[Option].foldRight(fa, Eval.now(0))((n, a) => a.map(_ + n))
Since `foldRight` yields a lazy computation, we need to force it to inspect the result:
scala> folded1.value
res0: Int = 1

With syntax extensions, we can write the same thing like this:
scala> val folded2 = fa.foldRight(Eval.now(0))((n, a) => a.map(_ + n))
scala> folded2.value
res1: Int = 1

Unfortunately, since `foldRight` is defined on many collections - this
extension clashes with the operation defined in `Foldable`.

To get past this and make sure you're getting the lazy `foldRight` defined
in `Foldable`, there's an alias `foldr`:
scala> val folded3 = fa.foldr(Eval.now(0))((n, a) => a.map(_ + n))
scala> folded3.value
res1: Int = 1

Attributes

Source
Foldable.scala

Concrete methods

def collectFirst[A, B](fa: F[A])(pf: PartialFunction[A, B]): Option[B]

Attributes

Source
Foldable.scala
def collectFirstSome[A, B](fa: F[A])(f: A => Option[B]): Option[B]

Like collectFirst from scala.collection.Traversable but takes A => Option[B] instead of PartialFunctions.

Like collectFirst from scala.collection.Traversable but takes A => Option[B] instead of PartialFunctions.

scala> import cats.syntax.all._
scala> val keys = List(1, 2, 4, 5)
scala> val map = Map(4 -> "Four", 5 -> "Five")
scala> keys.collectFirstSome(map.get)
res0: Option[String] = Some(Four)
scala> val map2 = Map(6 -> "Six", 7 -> "Seven")
scala> keys.collectFirstSome(map2.get)
res1: Option[String] = None

Attributes

Source
Foldable.scala
def collectFirstSomeM[G[_], A, B](fa: F[A])(f: A => G[Option[B]])(implicit G: Monad[G]): G[Option[B]]

Monadic version of collectFirstSome.

Monadic version of collectFirstSome.

If there are no elements, the result is None. collectFirstSomeM short-circuits, i.e. once a Some element is found, no further effects are produced.

For example:

scala> import cats.syntax.all._
scala> def parseInt(s: String): Either[String, Int] = Either.catchOnly[NumberFormatException](s.toInt).leftMap(_.getMessage)
scala> val keys1 = List("1", "2", "4", "5")
scala> val map1 = Map(4 -> "Four", 5 -> "Five")
scala> Foldable[List].collectFirstSomeM(keys1)(parseInt(_) map map1.get)
res0: scala.util.Either[String,Option[String]] = Right(Some(Four))

scala> val map2 = Map(6 -> "Six", 7 -> "Seven")
scala> Foldable[List].collectFirstSomeM(keys1)(parseInt(_) map map2.get)
res1: scala.util.Either[String,Option[String]] = Right(None)

scala> val keys2 = List("1", "x", "4", "5")
scala> Foldable[List].collectFirstSomeM(keys2)(parseInt(_) map map1.get)
res2: scala.util.Either[String,Option[String]] = Left(For input string: "x")

scala> val keys3 = List("1", "2", "4", "x")
scala> Foldable[List].collectFirstSomeM(keys3)(parseInt(_) map map1.get)
res3: scala.util.Either[String,Option[String]] = Right(Some(Four))

Attributes

Source
Foldable.scala
def collectFold[A, B](fa: F[A])(f: PartialFunction[A, B])(implicit B: Monoid[B]): B

Tear down a subset of this structure using a PartialFunction.

Tear down a subset of this structure using a PartialFunction.

scala> import cats.syntax.all._
scala> val xs = List(1, 2, 3, 4)
scala> Foldable[List].collectFold(xs) { case n if n % 2 == 0 => n }
res0: Int = 6

Attributes

Source
Foldable.scala
def collectFoldSome[A, B](fa: F[A])(f: A => Option[B])(implicit B: Monoid[B]): B

Tear down a subset of this structure using a A => Option[M].

Tear down a subset of this structure using a A => Option[M].

scala> import cats.syntax.all._
scala> val xs = List(1, 2, 3, 4)
scala> def f(n: Int): Option[Int] = if (n % 2 == 0) Some(n) else None
scala> Foldable[List].collectFoldSome(xs)(f)
res0: Int = 6

Attributes

Source
Foldable.scala
def combineAll[A : Monoid](fa: F[A]): A

Alias for fold.

Alias for fold.

Attributes

Source
Foldable.scala
def combineAllOption[A](fa: F[A])(implicit ev: Semigroup[A]): Option[A]

Attributes

Source
Foldable.scala
def compose[G[_] : Foldable]: Foldable[[α] =>> F[G[α]]]

Attributes

Source
Foldable.scala
def dropWhile_[A](fa: F[A])(p: A => Boolean): List[A]

Convert F[A] to a List[A], dropping all initial elements which match p.

Convert F[A] to a List[A], dropping all initial elements which match p.

Attributes

Source
Foldable.scala
override def exists[A](fa: F[A])(p: A => Boolean): Boolean

Check whether at least one element satisfies the predicate.

Check whether at least one element satisfies the predicate.

If there are no elements, the result is false.

Attributes

Definition Classes
Source
Foldable.scala
def existsM[G[_], A](fa: F[A])(p: A => G[Boolean])(implicit G: Monad[G]): G[Boolean]

Check whether at least one element satisfies the effectful predicate.

Check whether at least one element satisfies the effectful predicate.

If there are no elements, the result is false. existsM short-circuits, i.e. once a true result is encountered, no further effects are produced.

For example:

scala> import cats.syntax.all._
scala> val F = Foldable[List]
scala> F.existsM(List(1,2,3,4))(n => Option(n <= 4))
res0: Option[Boolean] = Some(true)

scala> F.existsM(List(1,2,3,4))(n => Option(n > 4))
res1: Option[Boolean] = Some(false)

scala> F.existsM(List(1,2,3,4))(n => if (n <= 2) Option(true) else Option(false))
res2: Option[Boolean] = Some(true)

scala> F.existsM(List(1,2,3,4))(n => if (n <= 2) Option(true) else None)
res3: Option[Boolean] = Some(true)

scala> F.existsM(List(1,2,3,4))(n => if (n <= 2) None else Option(true))
res4: Option[Boolean] = None

Attributes

Source
Foldable.scala
def filter_[A](fa: F[A])(p: A => Boolean): List[A]

Convert F[A] to a List[A], only including elements which match p.

Convert F[A] to a List[A], only including elements which match p.

Attributes

Source
Foldable.scala
def find[A](fa: F[A])(f: A => Boolean): Option[A]

Find the first element matching the predicate, if one exists.

Find the first element matching the predicate, if one exists.

Attributes

Source
Foldable.scala
def findM[G[_], A](fa: F[A])(p: A => G[Boolean])(implicit G: Monad[G]): G[Option[A]]

Find the first element matching the effectful predicate, if one exists.

Find the first element matching the effectful predicate, if one exists.

If there are no elements, the result is None. findM short-circuits, i.e. once an element is found, no further effects are produced.

For example:

scala> import cats.syntax.all._
scala> val list = List(1,2,3,4)
scala> Foldable[List].findM(list)(n => (n >= 2).asRight[String])
res0: Either[String,Option[Int]] = Right(Some(2))

scala> Foldable[List].findM(list)(n => (n > 4).asRight[String])
res1: Either[String,Option[Int]] = Right(None)

scala> Foldable[List].findM(list)(n => Either.cond(n < 3, n >= 2, "error"))
res2: Either[String,Option[Int]] = Right(Some(2))

scala> Foldable[List].findM(list)(n => Either.cond(n < 3, false, "error"))
res3: Either[String,Option[Int]] = Left(error)

Attributes

Source
Foldable.scala
def fold[A](fa: F[A])(implicit A: Monoid[A]): A

Fold implemented using the given Monoid[A] instance.

Fold implemented using the given Monoid[A] instance.

Attributes

Source
Foldable.scala
def foldA[G[_], A](fga: F[G[A]])(implicit G: Applicative[G], A: Monoid[A]): G[A]

Fold implemented using the given Applicative[G] and Monoid[A] instance.

Fold implemented using the given Applicative[G] and Monoid[A] instance.

This method is similar to fold, but may short-circuit.

For example:

scala> import cats.syntax.all._
scala> val F = Foldable[List]
scala> F.foldA(List(Either.right[String, Int](1), Either.right[String, Int](2)))
res0: Either[String, Int] = Right(3)

Attributes

Source
Foldable.scala
def foldK[G[_], A](fga: F[G[A]])(implicit G: MonoidK[G]): G[A]

Fold implemented using the given MonoidK[G] instance.

Fold implemented using the given MonoidK[G] instance.

This method is identical to fold, except that we use the universal monoid (MonoidK[G]) to get a Monoid[G[A]] instance.

For example:

scala> import cats.syntax.all._
scala> val F = Foldable[List]
scala> F.foldK(List(1 :: 2 :: Nil, 3 :: 4 :: 5 :: Nil))
res0: List[Int] = List(1, 2, 3, 4, 5)

Attributes

Source
Foldable.scala
final def foldLeftM[G[_], A, B](fa: F[A], z: B)(f: (B, A) => G[B])(implicit G: Monad[G]): G[B]

Alias for foldM.

Alias for foldM.

Attributes

Source
Foldable.scala
def foldM[G[_], A, B](fa: F[A], z: B)(f: (B, A) => G[B])(implicit G: Monad[G]): G[B]

Perform a stack-safe monadic left fold from the source context F into the target monad G.

Perform a stack-safe monadic left fold from the source context F into the target monad G.

This method can express short-circuiting semantics. Even when fa is an infinite structure, this method can potentially terminate if the foldRight implementation for F and the tailRecM implementation for G are sufficiently lazy.

Instances for concrete structures (e.g. List) will often have a more efficient implementation than the default one in terms of foldRight.

Attributes

Source
Foldable.scala
def foldMap[A, B](fa: F[A])(f: A => B)(implicit B: Monoid[B]): B

Fold implemented by mapping A values into B and then combining them using the given Monoid[B] instance.

Fold implemented by mapping A values into B and then combining them using the given Monoid[B] instance.

Attributes

Source
Foldable.scala
def foldMapA[G[_], A, B](fa: F[A])(f: A => G[B])(implicit G: Applicative[G], B: Monoid[B]): G[B]

Fold in an Applicative context by mapping the A values to G[B].

Fold in an Applicative context by mapping the A values to G[B]. combining the B values using the given Monoid[B] instance.

Similar to foldMapM, but will typically be less efficient.

scala> import cats.Foldable
scala> import cats.syntax.all._
scala> val evenNumbers = List(2,4,6,8,10)
scala> val evenOpt: Int => Option[Int] =
    |   i => if (i % 2 == 0) Some(i) else None
scala> Foldable[List].foldMapA(evenNumbers)(evenOpt)
res0: Option[Int] = Some(30)
scala> Foldable[List].foldMapA(evenNumbers :+ 11)(evenOpt)
res1: Option[Int] = None

Attributes

Source
Foldable.scala
def foldMapK[G[_], A, B](fa: F[A])(f: A => G[B])(implicit G: MonoidK[G]): G[B]

Fold implemented by mapping A values into B in a context G and then combining them using the MonoidK[G] instance.

Fold implemented by mapping A values into B in a context G and then combining them using the MonoidK[G] instance.

scala> import cats._, cats.implicits._
scala> val f: Int => Endo[String] = i => (s => s + i)
scala> val x: Endo[String] = Foldable[List].foldMapK(List(1, 2, 3))(f)
scala> val a = x("foo")
a: String = "foo321"

Attributes

Source
Foldable.scala
def foldMapM[G[_], A, B](fa: F[A])(f: A => G[B])(implicit G: Monad[G], B: Monoid[B]): G[B]

Monadic folding on F by mapping A values to G[B], combining the B values using the given Monoid[B] instance.

Monadic folding on F by mapping A values to G[B], combining the B values using the given Monoid[B] instance.

Similar to foldM, but using a Monoid[B]. Will typically be more efficient than foldMapA.

scala> import cats.Foldable
scala> import cats.syntax.all._
scala> val evenNumbers = List(2,4,6,8,10)
scala> val evenOpt: Int => Option[Int] =
    |   i => if (i % 2 == 0) Some(i) else None
scala> Foldable[List].foldMapM(evenNumbers)(evenOpt)
res0: Option[Int] = Some(30)
scala> Foldable[List].foldMapM(evenNumbers :+ 11)(evenOpt)
res1: Option[Int] = None

Attributes

Source
Foldable.scala
def foldRightDefer[G[_] : Defer, A, B](fa: F[A], gb: G[B])(fn: (A, G[B]) => G[B]): G[B]

Attributes

Source
Foldable.scala
override def forall[A](fa: F[A])(p: A => Boolean): Boolean

Check whether all elements satisfy the predicate.

Check whether all elements satisfy the predicate.

If there are no elements, the result is true.

Attributes

Definition Classes
Source
Foldable.scala
def forallM[G[_], A](fa: F[A])(p: A => G[Boolean])(implicit G: Monad[G]): G[Boolean]

Check whether all elements satisfy the effectful predicate.

Check whether all elements satisfy the effectful predicate.

If there are no elements, the result is true. forallM short-circuits, i.e. once a false result is encountered, no further effects are produced.

For example:

scala> import cats.syntax.all._
scala> val F = Foldable[List]
scala> F.forallM(List(1,2,3,4))(n => Option(n <= 4))
res0: Option[Boolean] = Some(true)

scala> F.forallM(List(1,2,3,4))(n => Option(n <= 1))
res1: Option[Boolean] = Some(false)

scala> F.forallM(List(1,2,3,4))(n => if (n <= 2) Option(true) else Option(false))
res2: Option[Boolean] = Some(false)

scala> F.forallM(List(1,2,3,4))(n => if (n <= 2) Option(false) else None)
res3: Option[Boolean] = Some(false)

scala> F.forallM(List(1,2,3,4))(n => if (n <= 2) None else Option(false))
res4: Option[Boolean] = None

Attributes

Source
Foldable.scala
def get[A](fa: F[A])(idx: Long): Option[A]

Get the element at the index of the Foldable.

Get the element at the index of the Foldable.

Attributes

Source
Foldable.scala
def intercalate[A](fa: F[A], a: A)(implicit A: Monoid[A]): A

Intercalate/insert an element between the existing elements while folding.

Intercalate/insert an element between the existing elements while folding.

scala> import cats.syntax.all._
scala> Foldable[List].intercalate(List("a","b","c"), "-")
res0: String = a-b-c
scala> Foldable[List].intercalate(List("a"), "-")
res1: String = a
scala> Foldable[List].intercalate(List.empty[String], "-")
res2: String = ""
scala> Foldable[Vector].intercalate(Vector(1,2,3), 1)
res3: Int = 8

Attributes

Source
Foldable.scala
override def isEmpty[A](fa: F[A]): Boolean

Returns true if there are no elements.

Returns true if there are no elements. Otherwise false.

Attributes

Definition Classes
Source
Foldable.scala
def maximumByList[A, B : Order](fa: F[A])(f: A => B): List[A]

Find all the maximum A items in this structure according to an Order.by(f).

Find all the maximum A items in this structure according to an Order.by(f). For all elements in the result Order.eqv(x, y) is true. Preserves order.

Attributes

See also

Reducible#maximumByNel for a version that doesn't need to return an Option for structures that are guaranteed to be non-empty.

minimumByList for minimum instead of maximum.

Source
Foldable.scala
def maximumByOption[A, B : Order](fa: F[A])(f: A => B): Option[A]

Find the maximum A item in this structure according to an Order.by(f).

Find the maximum A item in this structure according to an Order.by(f).

Attributes

Returns

None if the structure is empty, otherwise the maximum element wrapped in a Some.

See also

Reducible#maximumBy for a version that doesn't need to return an Option for structures that are guaranteed to be non-empty.

minimumByOption for minimum instead of maximum.

Source
Foldable.scala
def maximumList[A](fa: F[A])(implicit A: Order[A]): List[A]

Find all the maximum A items in this structure.

Find all the maximum A items in this structure. For all elements in the result Order.eqv(x, y) is true. Preserves order.

Attributes

See also

Reducible#maximumNel for a version that doesn't need to return an Option for structures that are guaranteed to be non-empty.

minimumList for minimum instead of maximum.

Source
Foldable.scala
def maximumOption[A](fa: F[A])(implicit A: Order[A]): Option[A]

Find the maximum A item in this structure according to the Order[A].

Find the maximum A item in this structure according to the Order[A].

Attributes

Returns

None if the structure is empty, otherwise the maximum element wrapped in a Some.

See also

Reducible#maximum for a version that doesn't need to return an Option for structures that are guaranteed to be non-empty.

minimumOption for minimum instead of maximum.

Source
Foldable.scala
def minimumByList[A, B : Order](fa: F[A])(f: A => B): List[A]

Find all the minimum A items in this structure according to an Order.by(f).

Find all the minimum A items in this structure according to an Order.by(f). For all elements in the result Order.eqv(x, y) is true. Preserves order.

Attributes

See also

Reducible#minimumByNel for a version that doesn't need to return an Option for structures that are guaranteed to be non-empty.

maximumByList for maximum instead of minimum.

Source
Foldable.scala
def minimumByOption[A, B : Order](fa: F[A])(f: A => B): Option[A]

Find the minimum A item in this structure according to an Order.by(f).

Find the minimum A item in this structure according to an Order.by(f).

Attributes

Returns

None if the structure is empty, otherwise the minimum element wrapped in a Some.

See also

Reducible#minimumBy for a version that doesn't need to return an Option for structures that are guaranteed to be non-empty.

maximumByOption for maximum instead of minimum.

Source
Foldable.scala
def minimumList[A](fa: F[A])(implicit A: Order[A]): List[A]

Find all the minimum A items in this structure.

Find all the minimum A items in this structure. For all elements in the result Order.eqv(x, y) is true. Preserves order.

Attributes

See also

Reducible#minimumNel for a version that doesn't need to return an Option for structures that are guaranteed to be non-empty.

maximumList for maximum instead of minimum.

Source
Foldable.scala
def minimumOption[A](fa: F[A])(implicit A: Order[A]): Option[A]

Find the minimum A item in this structure according to the Order[A].

Find the minimum A item in this structure according to the Order[A].

Attributes

Returns

None if the structure is empty, otherwise the minimum element wrapped in a Some.

See also

Reducible#minimum for a version that doesn't need to return an Option for structures that are guaranteed to be non-empty.

maximumOption for maximum instead of minimum.

Source
Foldable.scala
override def nonEmpty[A](fa: F[A]): Boolean

Attributes

Definition Classes
Source
Foldable.scala
def partitionBifold[H[_, _], A, B, C](fa: F[A])(f: A => H[B, C])(implicit A: Alternative[F], H: Bifoldable[H]): (F[B], F[C])

Separate this Foldable into a Tuple by a separating function A => H[B, C] for some Bifoldable[H] Equivalent to Functor#map and then Alternative#separate.

Separate this Foldable into a Tuple by a separating function A => H[B, C] for some Bifoldable[H] Equivalent to Functor#map and then Alternative#separate.

scala> import cats.syntax.all._, cats.Foldable, cats.data.Const
scala> val list = List(1,2,3,4)
scala> Foldable[List].partitionBifold(list)(a => ("value " + a.toString(), if (a % 2 == 0) -a else a))
res0: (List[String], List[Int]) = (List(value 1, value 2, value 3, value 4),List(1, -2, 3, -4))
scala> Foldable[List].partitionBifold(list)(a => Const[Int, Nothing with Any](a))
res1: (List[Int], List[Nothing with Any]) = (List(1, 2, 3, 4),List())

Attributes

Source
Foldable.scala
def partitionBifoldM[G[_], H[_, _], A, B, C](fa: F[A])(f: A => G[H[B, C]])(implicit A: Alternative[F], M: Monad[G], H: Bifoldable[H]): G[(F[B], F[C])]

Separate this Foldable into a Tuple by an effectful separating function A => G[H[B, C]] for some Bifoldable[H] Equivalent to Traverse#traverse over Alternative#separate

Separate this Foldable into a Tuple by an effectful separating function A => G[H[B, C]] for some Bifoldable[H] Equivalent to Traverse#traverse over Alternative#separate

scala> import cats.syntax.all._, cats.Foldable, cats.data.Const
scala> val list = List(1,2,3,4)
`Const`'s second parameter is never instantiated, so we can use an impossible type:
scala> Foldable[List].partitionBifoldM(list)(a => Option(Const[Int, Nothing with Any](a)))
res0: Option[(List[Int], List[Nothing with Any])] = Some((List(1, 2, 3, 4),List()))

Attributes

Source
Foldable.scala
def partitionEither[A, B, C](fa: F[A])(f: A => Either[B, C])(implicit A: Alternative[F]): (F[B], F[C])

Separate this Foldable into a Tuple by a separating function A => Either[B, C] Equivalent to Functor#map and then Alternative#separate.

Separate this Foldable into a Tuple by a separating function A => Either[B, C] Equivalent to Functor#map and then Alternative#separate.

scala> import cats.syntax.all._
scala> val list = List(1,2,3,4)
scala> Foldable[List].partitionEither(list)(a => if (a % 2 == 0) Left(a.toString) else Right(a))
res0: (List[String], List[Int]) = (List(2, 4),List(1, 3))
scala> Foldable[List].partitionEither(list)(a => Right(a * 4))
res1: (List[Nothing], List[Int]) = (List(),List(4, 8, 12, 16))

Attributes

Source
Foldable.scala
def partitionEitherM[G[_], A, B, C](fa: F[A])(f: A => G[Either[B, C]])(implicit A: Alternative[F], M: Monad[G]): G[(F[B], F[C])]

Separate this Foldable into a Tuple by an effectful separating function A => G[Either[B, C]] Equivalent to Traverse#traverse over Alternative#separate

Separate this Foldable into a Tuple by an effectful separating function A => G[Either[B, C]] Equivalent to Traverse#traverse over Alternative#separate

scala> import cats.syntax.all._, cats.Foldable, cats.Eval
scala> val list = List(1,2,3,4)
scala> val partitioned1 = Foldable[List].partitionEitherM(list)(a => if (a % 2 == 0) Eval.now(Either.left[String, Int](a.toString)) else Eval.now(Either.right[String, Int](a)))
Since `Eval.now` yields a lazy computation, we need to force it to inspect the result:
scala> partitioned1.value
res0: (List[String], List[Int]) = (List(2, 4),List(1, 3))
scala> val partitioned2 = Foldable[List].partitionEitherM(list)(a => Eval.later(Either.right(a * 4)))
scala> partitioned2.value
res1: (List[Nothing], List[Int]) = (List(),List(4, 8, 12, 16))

Attributes

Source
Foldable.scala
def productAll[A](fa: F[A])(implicit A: Numeric[A]): A

Attributes

Source
Foldable.scala
def reduceLeftOption[A](fa: F[A])(f: (A, A) => A): Option[A]

Reduce the elements of this structure down to a single value by applying the provided aggregation function in a left-associative manner.

Reduce the elements of this structure down to a single value by applying the provided aggregation function in a left-associative manner.

Attributes

Returns

None if the structure is empty, otherwise the result of combining the cumulative left-associative result of the f operation over all of the elements.

See also

reduceRightOption for a right-associative alternative.

Reducible#reduceLeft for a version that doesn't need to return an Option for structures that are guaranteed to be non-empty. Example:

scala> import cats.syntax.all._
scala> val l = List(6, 3, 2)
This is equivalent to (6 - 3) - 2
scala> Foldable[List].reduceLeftOption(l)(_ - _)
res0: Option[Int] = Some(1)
scala> Foldable[List].reduceLeftOption(List.empty[Int])(_ - _)
res1: Option[Int] = None
Source
Foldable.scala
def reduceLeftToOption[A, B](fa: F[A])(f: A => B)(g: (B, A) => B): Option[B]

Attributes

Source
Foldable.scala
def reduceRightOption[A](fa: F[A])(f: (A, Eval[A]) => Eval[A]): Eval[Option[A]]

Reduce the elements of this structure down to a single value by applying the provided aggregation function in a right-associative manner.

Reduce the elements of this structure down to a single value by applying the provided aggregation function in a right-associative manner.

Attributes

Returns

None if the structure is empty, otherwise the result of combining the cumulative right-associative result of the f operation over the A elements.

See also

reduceLeftOption for a left-associative alternative

Reducible#reduceRight for a version that doesn't need to return an Option for structures that are guaranteed to be non-empty. Example:

scala> import cats.syntax.all._
scala> val l = List(6, 3, 2)
This is equivalent to 6 - (3 - 2)
scala> Foldable[List].reduceRightOption(l)((current, rest) => rest.map(current - _)).value
res0: Option[Int] = Some(5)
scala> Foldable[List].reduceRightOption(List.empty[Int])((current, rest) => rest.map(current - _)).value
res1: Option[Int] = None
Source
Foldable.scala
def reduceRightToOption[A, B](fa: F[A])(f: A => B)(g: (A, Eval[B]) => Eval[B]): Eval[Option[B]]

Attributes

Source
Foldable.scala
def sequence_[G[_] : Applicative, A](fga: F[G[A]]): G[Unit]

Sequence F[G[A]] using Applicative[G].

Sequence F[G[A]] using Applicative[G].

This is similar to traverse_ except it operates on F[G[A]] values, so no additional functions are needed.

For example:

scala> import cats.syntax.all._
scala> val F = Foldable[List]
scala> F.sequence_(List(Option(1), Option(2), Option(3)))
res0: Option[Unit] = Some(())
scala> F.sequence_(List(Option(1), None, Option(3)))
res1: Option[Unit] = None

Attributes

Source
Foldable.scala
def sumAll[A](fa: F[A])(implicit A: Numeric[A]): A

Attributes

Source
Foldable.scala
def takeWhile_[A](fa: F[A])(p: A => Boolean): List[A]

Convert F[A] to a List[A], retaining only initial elements which match p.

Convert F[A] to a List[A], retaining only initial elements which match p.

Attributes

Source
Foldable.scala
def toIterable[A](fa: F[A]): Iterable[A]

Convert F[A] to an Iterable[A].

Convert F[A] to an Iterable[A].

This method may be overridden for the sake of performance, but implementers should take care not to force a full materialization of the collection.

Attributes

Source
Foldable.scala
def toList[A](fa: F[A]): List[A]

Convert F[A] to a List[A].

Convert F[A] to a List[A].

Attributes

Source
Foldable.scala
def traverse_[G[_], A, B](fa: F[A])(f: A => G[B])(implicit G: Applicative[G]): G[Unit]

Traverse F[A] using Applicative[G].

Traverse F[A] using Applicative[G].

A values will be mapped into G[B] and combined using Applicative#map2.

For example:

scala> import cats.syntax.all._
scala> def parseInt(s: String): Option[Int] = Either.catchOnly[NumberFormatException](s.toInt).toOption
scala> val F = Foldable[List]
scala> F.traverse_(List("333", "444"))(parseInt)
res0: Option[Unit] = Some(())
scala> F.traverse_(List("333", "zzz"))(parseInt)
res1: Option[Unit] = None

This method is primarily useful when G[_] represents an action or effect, and the specific A aspect of G[A] is not otherwise needed.

Attributes

Source
Foldable.scala
override def unorderedFold[A : CommutativeMonoid](fa: F[A]): A

Attributes

Definition Classes
Source
Foldable.scala
override def unorderedFoldMap[A, B : CommutativeMonoid](fa: F[A])(f: A => B): B

Attributes

Definition Classes
Source
Foldable.scala

Inherited methods

def contains_[A](fa: F[A], v: A)(implicit ev: Eq[A]): Boolean

Tests if fa contains v using the Eq instance for A

Tests if fa contains v using the Eq instance for A

Attributes

Inherited from:
UnorderedFoldable
Source
UnorderedFoldable.scala
def count[A](fa: F[A])(p: A => Boolean): Long

Count the number of elements in the structure that satisfy the given predicate.

Count the number of elements in the structure that satisfy the given predicate.

For example:

scala> import cats.syntax.all._
scala> val map1 = Map[Int, String]()
scala> val p1: String => Boolean = _.length > 0
scala> UnorderedFoldable[Map[Int, *]].count(map1)(p1)
res0: Long = 0

scala> val map2 = Map(1 -> "hello", 2 -> "world", 3 -> "!")
scala> val p2: String => Boolean = _.length > 1
scala> UnorderedFoldable[Map[Int, *]].count(map2)(p2)
res1: Long = 2

Attributes

Inherited from:
UnorderedFoldable
Source
UnorderedFoldable.scala
def size[A](fa: F[A]): Long

The size of this UnorderedFoldable.

The size of this UnorderedFoldable.

This is overridden in structures that have more efficient size implementations (e.g. Vector, Set, Map).

Note: will not terminate for infinite-sized collections.

Attributes

Inherited from:
UnorderedFoldable
Source
UnorderedFoldable.scala