February 2018
Intermediate to advanced
350 pages
7h 35m
English
Either and Option are simple to use, but what happens if we combine both?
object UserService { fun findAge(user: String): Either<String, Option<Int>> { //Magic }}
UserService.findAge returns Either<String, Option<Int>>; Left<String> for errors accessing the database or any other infrastructure, Right<None> for no value found on the database, and Right<Some<Int>> for a value found:
import arrow.core.*import arrow.syntax.function.pipefun main(args: Array<String>) { val anakinAge: Either<String, Option<Int>> = UserService.findAge("Anakin") anakinAge.fold(::identity, { op -> op.fold({ "Not found" }, Int::toString) }) pipe ::println }
To print an age, we need two nested folds, nothing too complicated. Problems arrive when ...
Read now
Unlock full access