Kotlin arrow IO、IO.fx和IO之间的差异!效应
我想在科特林使用阿罗 箭头有三个功能Kotlin arrow IO、IO.fx和IO之间的差异!效应,kotlin,functional-programming,arrow-kt,Kotlin,Functional Programming,Arrow Kt,我想在科特林使用阿罗 箭头有三个功能 IO {} IO.fx {} IO.fx { !effect} 我想知道这两者之间的区别。我知道IO.fx和IO.fx{!effect}有助于我们使用副作用,但是这两者之间有什么区别,为什么我要使用一个而不是另一个呢 IO{}是一个接受挂起函数的构造函数,因此可以调用其中的任何挂起函数。这是IO.effect{}的快捷方式 它启用的另一个功能是从第一点开始的构造函数效果。因此,您实际上是在添加一层可能不必要的额外包装 fun inefficientNest
IO {}
IO.fx {}
IO.fx { !effect}
我想知道这两者之间的区别。我知道IO.fx和IO.fx{!effect}有助于我们使用副作用,但是这两者之间有什么区别,为什么我要使用一个而不是另一个呢 IO{}是一个接受挂起函数的构造函数,因此可以调用其中的任何挂起函数。这是IO.effect{}的快捷方式 它启用的另一个功能是从第一点开始的构造函数效果。因此,您实际上是在添加一层可能不必要的额外包装
fun inefficientNestIO(): IO<IO<Unit>> = IO.fx { effect { bla() } }
fun inefficientUnpackedIO(): IO<Unit> = IO.fx { !effect { bla() } }
虽然这很快就会改变,但在0.11.X版上: IO{}是一个接受挂起函数的构造函数,因此可以调用其中的任何挂起函数。这是IO.effect{}的快捷方式 它启用的另一个功能是从第一点开始的构造函数效果。因此,您实际上是在添加一层可能不必要的额外包装
fun inefficientNestIO(): IO<IO<Unit>> = IO.fx { effect { bla() } }
fun inefficientUnpackedIO(): IO<Unit> = IO.fx { !effect { bla() } }
fun inefficientNestIO(): IO<IO<Unit>> = IO.fx { effect { bla() } }
fun inefficientUnpackedIO(): IO<Unit> = IO.fx { !effect { bla() } }
IO.fx {
val id = getUserIdSuspend()
val friends: List<User> =
!parMapN(
userFriends(id),
IO { userProfile(id) },
::toUsers
)
!friends.parTraverse(IO.applicative()) { user ->
IO { broadcastStatus(user) }
}
}