Trait/Object

cats

Foldable

Related Docs: object Foldable | package cats

Permalink

trait Foldable[F[_]] extends Serializable

Data structures that can be folded to a summary value.

In the case of a collection (such as List or Set), 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.

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

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

Self Type
Foldable[F]
Linear Supertypes
Serializable, Serializable, Any
Known Subclasses
Ordering
  1. Alphabetic
  2. By Inheritance
Inherited
  1. Foldable
  2. Serializable
  3. Serializable
  4. Any
  1. Hide All
  2. Show All
Visibility
  1. Public
  2. All

Abstract Value Members

  1. abstract def foldLeft[A, B](fa: F[A], b: B)(f: (B, A) ⇒ B): B

    Permalink

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

  2. abstract def foldRight[A, B](fa: F[A], lb: Eval[B])(f: (A, Eval[B]) ⇒ Eval[B]): Eval[B]

    Permalink

    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[_].

  3. abstract def getClass(): Class[_]

    Permalink
    Definition Classes
    Any

Concrete Value Members

  1. final def !=(arg0: Any): Boolean

    Permalink
    Definition Classes
    Any
  2. final def ##(): Int

    Permalink
    Definition Classes
    Any
  3. final def ==(arg0: Any): Boolean

    Permalink
    Definition Classes
    Any
  4. final def asInstanceOf[T0]: T0

    Permalink
    Definition Classes
    Any
  5. def combineAll[A](fa: F[A])(implicit arg0: Monoid[A]): A

    Permalink

    Alias for fold.

  6. def compose[G[_]](implicit ev: Foldable[G]): Foldable[[α]F[G[α]]]

    Permalink

    Compose this Foldable[F] with a Foldable[G] to create a Foldable[F[G]] instance.

  7. def dropWhile_[A](fa: F[A])(p: (A) ⇒ Boolean): List[A]

    Permalink

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

  8. def equals(arg0: Any): Boolean

    Permalink
    Definition Classes
    Any
  9. def exists[A](fa: F[A])(p: (A) ⇒ Boolean): Boolean

    Permalink

    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.

  10. def filter_[A](fa: F[A])(p: (A) ⇒ Boolean): List[A]

    Permalink

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

  11. def find[A](fa: F[A])(f: (A) ⇒ Boolean): Option[A]

    Permalink

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

  12. def fold[A](fa: F[A])(implicit A: Monoid[A]): A

    Permalink

    Fold implemented using the given Monoid[A] instance.

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

    Permalink

    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.std.list._
    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)
  14. def foldM[G[_], A, B](fa: F[A], z: B)(f: (B, A) ⇒ G[B])(implicit G: Monad[G]): G[B]

    Permalink

    Left associative monadic folding on F.

  15. def foldMap[A, B](fa: F[A])(f: (A) ⇒ B)(implicit B: Monoid[B]): B

    Permalink

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

  16. def forall[A](fa: F[A])(p: (A) ⇒ Boolean): Boolean

    Permalink

    Check whether all elements satisfy the predicate.

    Check whether all elements satisfy the predicate.

    If there are no elements, the result is true.

  17. def hashCode(): Int

    Permalink
    Definition Classes
    Any
  18. def isEmpty[A](fa: F[A]): Boolean

    Permalink

    Returns true if there are no elements.

    Returns true if there are no elements. Otherwise false.

  19. final def isInstanceOf[T0]: Boolean

    Permalink
    Definition Classes
    Any
  20. def nonEmpty[A](fa: F[A]): Boolean

    Permalink
  21. def reduceLeftToOption[A, B](fa: F[A])(f: (A) ⇒ B)(g: (B, A) ⇒ B): Option[B]

    Permalink
  22. def reduceRightToOption[A, B](fa: F[A])(f: (A) ⇒ B)(g: (A, Eval[B]) ⇒ Eval[B]): Eval[Option[B]]

    Permalink
  23. def sequenceU_[GA](fa: F[GA])(implicit U: Unapply[Applicative, GA]): M[Unit]

    Permalink

    Behaves like sequence_, but uses Unapply to find the Applicative instance for G - used when G is a type constructor with two or more parameters such as cats.data.Xor

    Behaves like sequence_, but uses Unapply to find the Applicative instance for G - used when G is a type constructor with two or more parameters such as cats.data.Xor

    scala> import cats.data.Xor
    scala> import cats.std.list._
    scala> val F = Foldable[List]
    scala> F.sequenceU_(List(Xor.right[String, Int](333), Xor.Right(444)))
    res0: Xor[String, Unit] = Right(())
    scala> F.sequenceU_(List(Xor.right[String, Int](333), Xor.Left("boo")))
    res1: Xor[String, Unit] = Left(boo)

    Note that using sequence_ instead of sequenceU_ would not compile without explicitly passing in the type parameters - the type checker has trouble inferring the appropriate instance.

  24. def sequence_[G[_], A](fga: F[G[A]])(implicit arg0: Applicative[G]): G[Unit]

    Permalink

    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.std.list._
    scala> import cats.std.option._
    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
  25. def takeWhile_[A](fa: F[A])(p: (A) ⇒ Boolean): List[A]

    Permalink

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

  26. def toList[A](fa: F[A]): List[A]

    Permalink

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

  27. def toString(): String

    Permalink
    Definition Classes
    Any
  28. def traverseU_[A, GB](fa: F[A])(f: (A) ⇒ GB)(implicit U: Unapply[Applicative, GB]): M[Unit]

    Permalink

    Behaves like traverse_, but uses Unapply to find the Applicative instance for G - used when G is a type constructor with two or more parameters such as cats.data.Xor

    Behaves like traverse_, but uses Unapply to find the Applicative instance for G - used when G is a type constructor with two or more parameters such as cats.data.Xor

    scala> import cats.data.Xor
    scala> import cats.std.list._
    scala> def parseInt(s: String): Xor[String, Int] =
         |   try { Xor.Right(s.toInt) }
         |   catch { case _: NumberFormatException => Xor.Left("boo") }
    scala> val F = Foldable[List]
    scala> F.traverseU_(List("333", "444"))(parseInt)
    res0: Xor[String, Unit] = Right(())
    scala> F.traverseU_(List("333", "zzz"))(parseInt)
    res1: Xor[String, Unit] = Left(boo)

    Note that using traverse_ instead of traverseU_ would not compile without explicitly passing in the type parameters - the type checker has trouble inferring the appropriate instance.

  29. def traverse_[G[_], A, B](fa: F[A])(f: (A) ⇒ G[B])(implicit G: Applicative[G]): G[Unit]

    Permalink

    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.data.Xor
    scala> import cats.std.list._
    scala> import cats.std.option._
    scala> def parseInt(s: String): Option[Int] = Xor.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.

Inherited from Serializable

Inherited from Serializable

Inherited from Any

Ungrouped