Преобразователь монад для всех монад в Arrow
Я начинающий пользователь Kotlin
, и многое другое, в частности Arrow
. Все выглядит очень хорошо, но я не могу найтиMonad transformer
которые позволяют мне создавать композицию между разными типами монад, например ZIO
из Scalaz
позвольте мне, используя трансформаторы вроде ZIO.fromOption
, ZIO.fromEither
, ZIO.fromTry
Я сделал эту базу кода, чтобы сделать эту композицию, но она выглядит очень многословной и не очень удобочитаемой.
private suspend fun monadsComposition() {
val program: IO<String> = IO.fx {
val option1 = !IO.effect { maybeString("hello") }
val option2 = !IO.effect { maybeString("world") }
val right1 = !IO.effect { eitherString("Combining") }
val right2 = !IO.effect { eitherString("Monads") }
val mergeOption = Option.fx {
val optionValue1 = !option1
val optionValue2 = !option2
val right = Either.fx<Int, String> {
val rightValue1 = !right1
val rightValue2 = !right2
"$optionValue1 - $optionValue2 - $rightValue1 - $rightValue2"
}
right.getOrElse { "Program has no output" }
}
mergeOption.getOrElse { "Program has no output" }
}
println(program.unsafeRunSync())
}
Есть ли лучшее решение?
С уважением