arrow-fx-coroutines / arrow.fx.coroutines / Resource / flatMap
fun <B> flatMap(f: (A) ->
Resource
<B>):
Resource
<B>
Create a new resource B from a resource A by mapping f.
This is useful when you need to create a resource that depends on other resources.
import arrow.fx.coroutines.*
object Consumer
object DBHandle
data class DatabaseConsumer(val db: DBHandle, val consumer: Consumer)
fun consumer(): Resource<Consumer> = Resource({ Consumer }, { _ -> println("Closed consumer") })
fun dhHandle(): Resource<DBHandle> = Resource({ DBHandle }, { _ -> println("Closed db handle") })
suspend fun main(): Unit {
//sampleStart
consumer()
.zip(dhHandle())
.flatMap { (consumer, dbHandle) ->
Resource(
{ DatabaseConsumer(dbHandle, consumer) },
{ _ -> println("Closed DatabaseConsumer") }
)
}.use { println("Expensive resource under use! $it") }
//sampleEnd
}
Do you like Arrow?
✖