From eac1ddb22c9cede263f0c7fb2eb45053df8e81a3 Mon Sep 17 00:00:00 2001 From: AdrianRaFo Date: Wed, 21 Mar 2018 21:44:46 +0100 Subject: [PATCH] Complete kleisli docs --- .../docs/docs/datatypes/kleisli/README.md | 32 ++++++++++++++++++- 1 file changed, 31 insertions(+), 1 deletion(-) diff --git a/modules/docs/arrow-docs/docs/docs/datatypes/kleisli/README.md b/modules/docs/arrow-docs/docs/docs/datatypes/kleisli/README.md index 1feb8349626..80cc50803c6 100644 --- a/modules/docs/arrow-docs/docs/docs/datatypes/kleisli/README.md +++ b/modules/docs/arrow-docs/docs/docs/datatypes/kleisli/README.md @@ -53,12 +53,42 @@ optionIntKleisli.map { output -> output + 1 }.fix().run("1") ``` #### FlatMap +`flatMap` is useful to map the `Kleisli` output into another kleisli +```kotlin:ank +import arrow.data.fix -#### Zip +val optionDoubleKleisli = Kleisli { str: String -> + if (str.toCharArray().all { it.isDigit() }) Some(str.toDouble()) else None +} + +optionIntKleisli.flatMap({optionDoubleKleisli},Option.monad()).fix().run("1") +``` #### AndThen +You can use `andThen` to compose with another kleisli + +```kotlin:ank +import arrow.data.fix + +val optionFromOptionKleisli = Kleisli { number: Int -> + Some(number+1) +} + +optionIntKleisli.andThen(optionFromOptionKleisli,Option.monad()).fix().run("1") +``` +with another function + +```kotlin:ank +optionIntKleisli.andThen({number: Int -> Some(number+1)}, Option.monad()).fix().run("1") +``` + +or to replace the `Kleisli` result + +```kotlin:ank +optionIntKleisli.andThen(Some(0), Option.monad()).fix().run("1") +```