package hierarchy
// onCancel, guarantee, guaranteeCase, bracket
trait MonadCancel[F[_], E] extends cats.MonadError[F, E]:
def canceled: F[Unit]
def uncancelable[A](poll: Poll[F] => F[A]): F[A]
trait Poll[F[_]]:
def apply[A](fa: F[A]): F[A]
package hierarchy
// onCancel, guarantee, guaranteeCase, bracket
trait MonadCancel[F[_], E] extends cats.MonadError[F, E]:
def canceled: F[Unit]
def uncancelable[A](poll: Poll[F] => F[A]): F[A]
trait Poll[F[_]]:
def apply[A](fa: F[A]): F[A]