1
2
3
4
5
6
7
8
9
10
11
12
type 'a enqueue = ('a, exn) result -> unit
type _ Effect.t += Suspend : (Cancel.fiber_context -> 'a enqueue -> unit) -> 'a Effect.t
let enter_unchecked op fn =
Trace.suspend_fiber op;
Effect.perform (Suspend fn)
let enter op fn =
enter_unchecked op @@ fun fiber enqueue ->
match Cancel.Fiber_context.get_error fiber with
| None -> fn fiber enqueue
| Some ex -> enqueue (Error ex)