``` interface Service<F> { fun applicative...
# arrow
r
Copy code
interface Service<F> {
  fun applicative(): Applicative<F>
  fun fetchOne(): Kind<F, Int>
  fun fetchTwo(): Kind<F, Int>
  fun fetchSum(): Kind<F, Int> = with(applicative()) {
    map(fetchOne(), fetchTwo(), { one, two -> one + two })   
  }
}

@instance(DeferredK::class)
interface DeferredServiceInstance : Service<ForDeferredK> {
  fun applicative(): Applicative<ForDeferredK> = DeferredK.applicative()
  override fun fetchOne(): DeferredK<Int> = async { 1 }.k()
  override fun fetchTwo(): DeferredK<Int> = async { 2 }.k()
}

DeferredK.service().fetchAll() // Deferred(3)