Arrow fx использует сопрограммы при работе с IO
, не заменяет их. Аналогично тому, как Room имеет расширения, позволяющие использовать Flow
.
. Однако fx можно использовать с однопоточными компонентами, такими как Option или Either.
val ab :Option<Int> = Option.fx {
val a: Int = maybeA.bind()
val b: Int = maybeB.bind()
a + b
}
Как вы можете видеть, если какой-либо из Майбес отсутствует, тогда результат будет отсутствовать. Это равносильно выполнению:
maybeA.flatMap { a ->
maybeB.map { b -> a + b }
}
Что может привести к путанице при работе с нагрузками этих функциональных типов данных.
Итак, Arrow fx помогает нам работать с привязками таким образом, чтобы это более функционально.
Кроме того, теперь у нас есть Arrow Meta (WIP), который использует плагины компилятора, чтобы сделать Arrow еще более плавным. В будущем мы сможем сделать что-то вроде этого:
val ab :Option<Int> = Option.fx {
val a: Int by maybeA
val b: Int by maybeB
a + b
}