diff --git a/src/main/kotlin/com/github/michaelbull/result/Iterable.kt b/src/main/kotlin/com/github/michaelbull/result/Iterable.kt index ccaf71f..8a7e5de 100644 --- a/src/main/kotlin/com/github/michaelbull/result/Iterable.kt +++ b/src/main/kotlin/com/github/michaelbull/result/Iterable.kt @@ -54,7 +54,9 @@ inline fun List.foldRight( * * - Elm: [Result.Extra.combine](http://package.elm-lang.org/packages/elm-community/result-extra/2.2.0/Result-Extra#combine) */ -fun combine(vararg results: Result) = results.asIterable().combine() +fun combine(vararg results: Result): Result, E> { + return results.asIterable().combine() +} /** * Combines an [Iterable] of [Results][Result] into a single [Result] (holding a [List]). @@ -142,7 +144,12 @@ fun Iterable>.partition(): Pair, List> { */ fun Iterable.mapResult(transform: (V) -> Result): Result, E> { return Ok(map { element -> - transform(element).getOrElse { return Err(it) } + val transformed = transform(element) + + when (transformed) { + is Ok -> transformed.value + is Err -> return transformed + } }) } @@ -152,7 +159,12 @@ fun Iterable.mapResult(transform: (V) -> Result): Result> Iterable.mapResultTo(destination: C, transform: (V) -> Result): Result { return Ok(mapTo(destination) { element -> - transform(element).getOrElse { return Err(it) } + val transformed = transform(element) + + when (transformed) { + is Ok -> transformed.value + is Err -> return transformed + } }) } @@ -162,7 +174,13 @@ fun > Iterable.mapResultTo(destination: */ fun Iterable.mapResultNotNull(transform: (V) -> Result?): Result, E> { return Ok(mapNotNull { element -> - transform(element)?.getOrElse { return Err(it) } + val transformed = transform(element) + + when (transformed) { + is Ok -> transformed.value + is Err -> return transformed + null -> null + } }) } @@ -172,7 +190,13 @@ fun Iterable.mapResultNotNull(transform: (V) -> Result? */ fun > Iterable.mapResultNotNullTo(destination: C, transform: (V) -> Result?): Result { return Ok(mapNotNullTo(destination) { element -> - transform(element)?.getOrElse { return Err(it) } + val transformed = transform(element) + + when (transformed) { + is Ok -> transformed.value + is Err -> return transformed + null -> null + } }) } @@ -182,7 +206,12 @@ fun > Iterable.mapResultNotNullTo( */ fun Iterable.mapResultIndexed(transform: (index: Int, V) -> Result): Result, E> { return Ok(mapIndexed { index, element -> - transform(index, element).getOrElse { return Err(it) } + val transformed = transform(index, element) + + when (transformed) { + is Ok -> transformed.value + is Err -> return transformed + } }) } @@ -192,7 +221,12 @@ fun Iterable.mapResultIndexed(transform: (index: Int, V) -> Result< */ fun > Iterable.mapResultIndexedTo(destination: C, transform: (index: Int, V) -> Result): Result { return Ok(mapIndexedTo(destination) { index, element -> - transform(index, element).getOrElse { return Err(it) } + val transformed = transform(index, element) + + when (transformed) { + is Ok -> transformed.value + is Err -> return transformed + } }) } @@ -203,7 +237,13 @@ fun > Iterable.mapResultIndexedTo(destin */ fun Iterable.mapResultIndexedNotNull(transform: (index: Int, V) -> Result?): Result, E> { return Ok(mapIndexedNotNull { index, element -> - transform(index, element)?.getOrElse { return Err(it) } + val transformed = transform(index, element) + + when (transformed) { + is Ok -> transformed.value + is Err -> return transformed + null -> null + } }) } @@ -213,6 +253,12 @@ fun Iterable.mapResultIndexedNotNull(transform: (index: Int, */ fun > Iterable.mapResultIndexedNotNullTo(destination: C, transform: (index: Int, V) -> Result?): Result { return Ok(mapIndexedNotNullTo(destination) { index, element -> - transform(index, element)?.getOrElse { return Err(it) } + val transformed = transform(index, element) + + when (transformed) { + is Ok -> transformed.value + is Err -> return transformed + null -> null + } }) } diff --git a/src/main/kotlin/com/github/michaelbull/result/Map.kt b/src/main/kotlin/com/github/michaelbull/result/Map.kt index 015fba3..ec18c54 100644 --- a/src/main/kotlin/com/github/michaelbull/result/Map.kt +++ b/src/main/kotlin/com/github/michaelbull/result/Map.kt @@ -37,7 +37,12 @@ inline infix fun Result.mapError(transform: (E) -> F): Result Result, E>.mapAll(transform: (V) -> Result): Result, E> { return map { iterable -> iterable.map { element -> - transform(element).getOrElse { return Err(it) } + val transformed = transform(element) + + when (transformed) { + is Ok -> transformed.value + is Err -> return transformed + } } } }