Module Miou_sync.Computation

type 'a state =
  1. | Cancelled of exn * Stdlib.Printexc.raw_backtrace
  2. | Returned of 'a
  3. | Continue of {
    1. balance : int;
    2. triggers : Trigger.t list;
    }
type !'a t = private 'a state Stdlib.Atomic.t
val create : unit -> 'a t

create () creates a new computation in the running state.

val try_return : 'a t -> 'a -> bool

try_return c value attempts to complete the computation with the specified value and returns true on success. Otherwise returns false, which means that the computation had already been completed before.

val try_capture : 'a t -> ('b -> 'a) -> 'b -> bool

try_capture c fn x calls fn x and tries to complete the computation with the value returned or the exception raised by the call and returns true on success. Otherwise returns false, which means that the computation had already been completed before.

val try_cancel : 'a t -> (exn * Stdlib.Printexc.raw_backtrace) -> bool

try_cancel c (exn, bt) attempts to mark the computation c as cancelled with the specified exception and backtrace and returns true on success. Otherwise returns false, which means that the computation had already been completed before.

val is_running : 'a t -> bool

is_running c determines whether the computation c is in the running state meaning that it has not yet been completed.

val cancelled : 'a t -> (exn * Stdlib.Printexc.raw_backtrace) option

cancelled c returns the exception that the computation has been cancelled with or returns None in case the computation has not been cancelled.

val raise_if_errored : 'a t -> unit

raise_if_errored raises the exception the computation was cancelled with if it was errored.

val peek : 'a t -> ('a, exn * Stdlib.Printexc.raw_backtrace) Stdlib.result option

peek c returns the result of the computation c or None in case the computation has not completed.

val try_attach : 'a t -> Trigger.t -> bool

try_attach c trigger tries to attach the trigger to be signaled on completion of the computation and returns true on success. Otherwise, it returns false, which means that the computation has already been completed or the trigger has already been signaled.

val detach : 'a t -> Trigger.t -> unit

detach c trigger signals the trigger and detaches it from the computation c.

val clean : 'a t -> unit
val await : 'a t -> ('a, exn * Stdlib.Printexc.raw_backtrace) Stdlib.result

await c waits for the computation to complete and either returns the value of the completed computation or the exception the computation was cancelled with.

val await_exn : 'a t -> 'a
val canceller : from:'a t -> into:'b t -> Trigger.t