t

cats

# Bitraverse 

### Companion object Bitraverse

#### trait Bitraverse[F[_, _]] extends Bifoldable[F] with Bifunctor[F]

A type class abstracting over types that give rise to two independent cats.Traverses.

Self Type
Bitraverse[F]
Annotations
@implicitNotFound( ... ) @typeclass( ... , ... )
Source
Bitraverse.scala
Linear Supertypes
Bifunctor[F], Bifoldable[F], Serializable, Serializable, AnyRef, Any
Known Subclasses
Ordering
1. Alphabetic
2. By Inheritance
Inherited
1. Bitraverse
2. Bifunctor
3. Bifoldable
4. Serializable
5. Serializable
6. AnyRef
7. Any
1. Hide All
2. Show All
Visibility
1. Public
2. All

### Abstract Value Members

1. abstract def bifoldLeft[A, B, C](fab: F[A, B], c: C)(f: (C, A) ⇒ C, g: (C, B) ⇒ C): C

Collapse the structure with a left-associative function

Collapse the structure with a left-associative function

Example:

```scala> import cats.Bifoldable
scala> val fab = (List(1), 2)

scala> Bifoldable[Tuple2].bifoldLeft(fab, Option(0))((c, a) => c.map(_ + a.head), (c, b) => c.map(_ + b))
res0: Option[Int] = Some(3)```

With syntax extensions, `bifoldLeft` can be used like:

```scala> import cats.implicits._
scala> fab.bifoldLeft(Option(0))((c, a) => c.map(_ + a.head), (c, b) => c.map(_ + b))
res1: Option[Int] = Some(3)```
Definition Classes
Bifoldable
2. abstract def bifoldRight[A, B, C](fab: F[A, B], c: Eval[C])(f: (A, Eval[C]) ⇒ Eval[C], g: (B, Eval[C]) ⇒ Eval[C]): Eval[C]

Collapse the structure with a right-associative function Right associative lazy bifold on `F` using the folding function 'f' and 'g'.

Collapse the structure with a right-associative function Right associative lazy bifold on `F` using the folding function 'f' and 'g'.

This method evaluates `c` lazily (in some cases it will not be needed), and returns a lazy value. We are using ```(_, Eval[C]) => Eval[C]``` 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.Bifoldable
scala> val fab = (List(1), 2)

scala> val bifolded1 = Bifoldable[Tuple2].bifoldRight(fab, Eval.now(0))((a, c) => c.map(_ + a.head), (b, c) => c.map(_ + b))
scala> bifolded1.value
res0: Int = 3```

With syntax extensions, `bifoldRight` can be used like:

```scala> import cats.implicits._
scala> val bifolded2 = fab.bifoldRight(Eval.now(0))((a, c) => c.map(_ + a.head), (b, c) => c.map(_ + b))
scala> bifolded2.value
res1: Int = 3```
Definition Classes
Bifoldable
3. abstract def bitraverse[G[_], A, B, C, D](fab: F[A, B])(f: (A) ⇒ G[C], g: (B) ⇒ G[D])(implicit arg0: Applicative[G]): G[F[C, D]]

Traverse each side of the structure with the given functions.

Traverse each side of the structure with the given functions.

Example:

```scala> import cats.implicits._

scala> def parseInt(s: String): Option[Int] = Either.catchOnly[NumberFormatException](s.toInt).toOption

scala> ("1", "2").bitraverse(parseInt, parseInt)
res0: Option[(Int, Int)] = Some((1,2))

scala> ("1", "two").bitraverse(parseInt, parseInt)
res1: Option[(Int, Int)] = None```

### Concrete Value Members

1. final def !=(arg0: Any)
Definition Classes
AnyRef → Any
2. final def ##(): Int
Definition Classes
AnyRef → Any
3. final def ==(arg0: Any)
Definition Classes
AnyRef → Any
4. final def asInstanceOf[T0]: T0
Definition Classes
Any
5. def bifold[A, B](fab: F[A, B])(implicit A: Monoid[A], B: Monoid[B]): (A, B)
Definition Classes
Bifoldable
6. def bifoldMap[A, B, C](fab: F[A, B])(f: (A) ⇒ C, g: (B) ⇒ C)(implicit C: Monoid[C]): C

Collapse the structure by mapping each element to an element of a type that has a cats.Monoid

Collapse the structure by mapping each element to an element of a type that has a cats.Monoid

Definition Classes
Bifoldable
7. def bimap[A, B, C, D](fab: F[A, B])(f: (A) ⇒ C, g: (B) ⇒ D): F[C, D]

The quintessential method of the Bifunctor trait, it applies a function to each "side" of the bifunctor.

The quintessential method of the Bifunctor trait, it applies a function to each "side" of the bifunctor.

Example:

```scala> import cats.implicits._

scala> val x: (List[String], Int) = (List("foo", "bar"), 3)
res0: (Option[String], Long) = (Some(foo),4)```
Definition Classes
BitraverseBifunctor
8. def bisequence[G[_], A, B](fab: F[G[A], G[B]])(implicit arg0: Applicative[G]): G[F[A, B]]

Invert the structure from F[G[A], G[B]] to G[F[A, B]].

Invert the structure from F[G[A], G[B]] to G[F[A, B]].

Example:

```scala> import cats.implicits._

scala> val rightSome: Either[Option[String], Option[Int]] = Either.right(Some(3))
scala> rightSome.bisequence
res0: Option[Either[String, Int]] = Some(Right(3))

scala> val rightNone: Either[Option[String], Option[Int]] = Either.right(None)
scala> rightNone.bisequence
res1: Option[Either[String, Int]] = None

scala> val leftSome: Either[Option[String], Option[Int]] = Either.left(Some("foo"))
scala> leftSome.bisequence
res2: Option[Either[String, Int]] = Some(Left(foo))

scala> val leftNone: Either[Option[String], Option[Int]] = Either.left(None)
scala> leftNone.bisequence
res3: Option[Either[String, Int]] = None```
9. def clone()
Attributes
protected[lang]
Definition Classes
AnyRef
Annotations
@throws( ... ) @native() @IntrinsicCandidate()
10. def compose[G[_, _]](implicit ev: Bitraverse[G]): Bitraverse[[α, β]F[G[α, β], G[α, β]]]

If F and G are both cats.Bitraverse then so is their composition F[G[_, _], G[_, _]]

11. def compose[G[_, _]](implicit G0: Bifunctor[G]): Bifunctor[[α, β]F[G[α, β], G[α, β]]]

The composition of two Bifunctors is itself a Bifunctor

The composition of two Bifunctors is itself a Bifunctor

Definition Classes
Bifunctor
12. def compose[G[_, _]](implicit ev: Bifoldable[G]): Bifoldable[[α, β]F[G[α, β], G[α, β]]]
Definition Classes
Bifoldable
13. final def eq(arg0: AnyRef)
Definition Classes
AnyRef
14. def equals(arg0: Any)
Definition Classes
AnyRef → Any
15. final def getClass(): Class[_]
Definition Classes
AnyRef → Any
Annotations
@native() @IntrinsicCandidate()
16. def hashCode(): Int
Definition Classes
AnyRef → Any
Annotations
@native() @IntrinsicCandidate()
17. final def isInstanceOf[T0]
Definition Classes
Any
18. def leftFunctor[X]: Functor[[α\$1\$]F[α\$1\$, X]]
Definition Classes
Bifunctor
19. def leftMap[A, B, C](fab: F[A, B])(f: (A) ⇒ C): F[C, B]

apply a function to the "left" functor

apply a function to the "left" functor

Definition Classes
Bifunctor
20. def leftSequence[G[_], A, B](fgab: F[G[A], B])(implicit G: Applicative[G]): G[F[A, B]]

Sequence the left side of the structure.

Sequence the left side of the structure. For the right side, use the standard `sequence` from cats.Traverse.

Example:

```scala> import cats.implicits._

scala> val optionalErrorRight: Either[Option[String], Int] = Either.right(123)
scala> optionalErrorRight.leftSequence
res1: Option[Either[String, Int]] = Some(Right(123))

scala> val optionalErrorLeftSome: Either[Option[String], Int] = Either.left(Some("something went wrong"))
scala> optionalErrorLeftSome.leftSequence
res2: Option[Either[String, Int]] = Some(Left(something went wrong))

scala> val optionalErrorLeftNone: Either[Option[String], Int] = Either.left(None)
scala> optionalErrorLeftNone.leftSequence
res3: Option[Either[String,Int]] = None```
Annotations
@noop()
21. def leftTraverse[G[_], A, B, C](fab: F[A, B])(f: (A) ⇒ G[C])(implicit G: Applicative[G]): G[F[C, B]]

Traverse over the left side of the structure.

Traverse over the left side of the structure. For the right side, use the standard `traverse` from cats.Traverse.

Example:

```scala> import cats.implicits._

scala> val intAndString: (Int, String) = (7, "test")

scala> Bitraverse[Tuple2].leftTraverse(intAndString)(i => Option(i).filter(_ > 5))
res1: Option[(Int, String)] = Some((7,test))

scala> Bitraverse[Tuple2].leftTraverse(intAndString)(i => Option(i).filter(_ < 5))
res2: Option[(Int, String)] = None```
Annotations
@noop()
22. def leftWiden[A, B, AA >: A](fab: F[A, B]): F[AA, B]

Widens A into a supertype AA.

Widens A into a supertype AA. Example:

```scala> import cats.implicits._
scala> sealed trait Foo
scala> case object Bar extends Foo
scala> val x1: Either[Bar.type, Int] = Either.left(Bar)
scala> val x2: Either[Foo, Int] = x1.leftWiden```
Definition Classes
Bifunctor
23. final def ne(arg0: AnyRef)
Definition Classes
AnyRef
24. final def notify(): Unit
Definition Classes
AnyRef
Annotations
@native() @IntrinsicCandidate()
25. final def notifyAll(): Unit
Definition Classes
AnyRef
Annotations
@native() @IntrinsicCandidate()
26. def rightFunctor[X]: Functor[[β\$0\$]F[X, β\$0\$]]
Definition Classes
Bifunctor
27. final def synchronized[T0](arg0: ⇒ T0): T0
Definition Classes
AnyRef
28. def toString(): String
Definition Classes
AnyRef → Any
29. final def wait(arg0: Long, arg1: Int): Unit
Definition Classes
AnyRef
Annotations
@throws( ... )
30. final def wait(arg0: Long): Unit
Definition Classes
AnyRef
Annotations
@throws( ... ) @native()
31. final def wait(): Unit
Definition Classes
AnyRef
Annotations
@throws( ... )

### Deprecated Value Members

1. def finalize(): Unit
Attributes
protected[lang]
Definition Classes
AnyRef
Annotations
@throws( classOf[java.lang.Throwable] ) @Deprecated
Deprecated