我们可以在Arrow monad压缩中使用bind()
的方法之一是"大喊";(第三个例子(:
/**
* All possible approaches to running [Kind] in the context of [Fx]
*
* ```
* fx {
* val one = just(1).bind() // using bind
* val (two) = just(one + 1) // using destructuring
* val three = !just(two + 1) // yelling at it
* }
* ```
*/
由于Kotlin的!
运算符用于否定布尔值,您能解释一下它在Arrow中是如何以及为什么这样工作的吗?
我在Kotlin关于运算符重载的文档中找到了答案:https://kotlinlang.org/docs/reference/operator-overloading.html
BindSyntax
覆盖非操作员:
interface BindSyntax<F> {
suspend fun <A> Kind<F, A>.bind(): A
suspend operator fun <A> Kind<F, A>.not(): A =
bind()
}