arrow-fx / arrow.fx / Semaphore / releaseN

releaseN

abstract fun releaseN(n: Long): Kind<F, Unit>

Release n resources

import arrow.fx.*
import arrow.fx.extensions.io.async.async
import arrow.fx.extensions.io.monad.flatMap

fun main(args: Array<String>) {
  //sampleStart
  val semaphore = Semaphore.uncancellable<ForIO>(5, IO.async())

  semaphore.flatMap { s ->
    s.acquireN(5).flatMap {
      s.releaseN(3).flatMap {
        s.available()
      }
    }
  }.unsafeRunSync() == 3L
  //sampleEnd
}

Do you like Arrow?

Arrow Org
<