One of the ways we can bind()
in an Arrow monad comprehesion is "yelling" (third example):
/**
* 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
* }
* ```
*/
Since Kotlin's !
operator is used to negate a boolean, can you explain how and why it works this way in Arrow?