arrow-fx / arrow.fx.typeclasses / Concurrent / Promise

Promise

open fun <A> Promise(): Kind<F, Promise<F, A>>

Create a pure Promise that is empty and can be filled exactly once.

import arrow.Kind
import arrow.fx.*
import arrow.fx.extensions.io.concurrent.concurrent
import arrow.fx.typeclasses.Concurrent
import arrow.fx.typeclasses.seconds

fun main(args: Array<String>) {
  fun <F> Concurrent<F>.promiseExample(): Kind<F, Unit> =
    //sampleStart
    fx.concurrent {
      val promise = !Promise<String>()
      val (join, cancel) = !sleep(1.seconds)
        .followedBy(promise.complete("Hello World!"))
        .fork()
      val message = !join
      message
    }

  //sampleEnd
  IO.concurrent().promiseExample()
    .fix().unsafeRunSync()
}

See Also

Promise

Do you like Arrow?

Arrow Org
<