cancelable method

IO<A> cancelable(
  1. IO<Unit> fin
)

Implementation

IO<A> cancelable(IO<Unit> fin) => IO.uncancelable((poll) {
      return start().flatMap((fiber) {
        return poll(fiber.join())
            .onCancel(fin.productR(() => fiber.cancel()))
            .flatMap((oc) =>
                oc.embed(poll(IO.canceled.productR(() => IO.never()))));
      });
    });