So I currently have this: ``` class ForCompletionS...
# arrow
p
So I currently have this:
Copy code
class ForCompletionStage private constructor() { companion object }
typealias CompletionStageFor<V> = Kind<ForCompletionStage, V>
data class CompletionStageOf<V>(val fut: CompletionStage<V>) : CompletionStageFor<V>
@Suppress("UNCHECKED_CAST", "NOTHING_TO_INLINE")
inline fun <A> CompletionStageFor<A>.fix(): CompletionStageOf<A> = this as CompletionStageOf<A>

interface CompletionStageMonad : Monad<ForCompletionStage> {

    companion object {}

    override fun <A, B> Kind<ForCompletionStage, A>.flatMap(f: (A) -> Kind<ForCompletionStage, B>): Kind<ForCompletionStage, B> {
        val x1: CompletionStageOf<A> = this.fix()
        val x2: CompletionStage<A> = x1.fut
        val x3: CompletionStage<B> = x2.thenCompose { f(it).fix().fut }
        val x4: Kind<ForCompletionStage, CompletionStage<B>> = just(x3)
        // ...
    }
}