arrow-fx / arrow.fx.typeclasses / MonadDefer / Ref
open fun <A> Ref(a: A): Kind<F,
Ref
<F, A>>
Create a Ref a pure atomic reference to safely manage mutable state. It’s a pure version of java.util.concurrent.atomic.AtomicReference that works in context F.
It’s always initialized to a value, and allows for concurrent updates.
import arrow.Kind
import arrow.core.Tuple2
import arrow.fx.*
import arrow.fx.extensions.io.monadDefer.monadDefer
import arrow.fx.typeclasses.MonadDefer
fun main(args: Array<String>) {
fun <F> MonadDefer<F>.refExample(): Kind<F, Tuple2<Int, Int>> =
//sampleStart
fx.monad {
val ref = !Ref(1)
val initial = !ref.getAndUpdate(Int::inc)
val updated = !ref.get()
Tuple2(initial, updated)
}
//sampleEnd
IO.monadDefer().refExample()
.fix().unsafeRunSync().let(::println)
}
Do you like Arrow?
✖