Преобразователь монад для всех монад в 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())
}

Есть ли лучшее решение?

С уважением

0 ответов

Другие вопросы по тегам