use

infix suspend tailrec fun <B> use(f: suspend (A) -> B): B(source)

Use the created resource When done will run all finalizers

import arrow.fx.coroutines.*

class DataSource {
fun connect(): Unit = println("Connecting dataSource")
fun users(): List<String> = listOf("User-1", "User-2", "User-3")
fun close(): Unit = println("Closed dataSource")
}

suspend fun main(): Unit {
val dataSource = resource {
DataSource().also { it.connect() }
} release DataSource::close

val res = dataSource
.use { ds -> "Using data source: ${ds.users()}" }
.also(::println)
}