Slide 57
Slide 57 text
Direct implementation with racePair
def racePairKeepLeft[A, B](left: IO[A], right: IO[B]): IO[A] = {
left
.racePair(right)
.bracketCase {
case Left((left, rightFiber)) => rightFiber.cancel.as(left).uncancelable
case Right((leftFiber, _)) =>
leftFiber.join.guaranteeCase {
case ExitCase.Canceled => leftFiber.cancel
case _ => IO.unit
}
} {
case (Left((_, rightFiber)), ExitCase.Canceled) => rightFiber.cancel
case (Right((leftFiber, _)), ExitCase.Canceled) => leftFiber.cancel
case _ => IO.unit
}
}