arrow-core / arrow.core.extensions.either.bitraverse / arrow.core.Either / bitraverse

bitraverse

fun Either.Companion.~~bitraverse~~(): EitherBitraverse Deprecated: Functor typeclasses is deprecated. Use concrete methods on Either

The type class Bitraverse defines the behaviour of two separetes Traverse over a data type.

Every instance of Bitraverse<F> must contains the next functions:

Bitraverse

Bitraverse perfoms aTraverse over both side of the Data type which is Bifoldable.

import arrow.core.*
import arrow.core.extensions.option.applicative.applicative
import arrow.core.extensions.*
import arrow.core.extensions.tuple2.bitraverse.bitraverse
fun main() {
//sampleStart
val f: (Int) -> Option<Int> = { Some(it + 1) }
val g: (Int) -> Option<Int> = { Some(it * 3) }

val tuple = Tuple2(1, 2)
val bitraverseResult = tuple.bitraverse(Option.applicative(), f, g)
//sampleEnd
println(bitraverseResult)
}

Bisequence

Bisequence invert the original structure F<G<A,B>> to G<F<A>,F<B>>

import arrow.core.*
import arrow.core.extensions.*
import arrow.core.extensions.option.applicative.applicative
import arrow.core.extensions.tuple2.bitraverse.bisequence
fun main() {
//sampleStart
val tuple = Tuple2(Some(1), Some(2))
val sequenceResult = tuple.bisequence(Option.applicative())
//sampleEnd
println(sequenceResult)
}

Do you like Arrow?

Arrow Org
<