Multi.Make2val global : idthe identifier of the global (initial) state.
val fork : unit -> (unit, 'e) T2(M).tfork () forks the current state.
switch id switches to the state with the given id if such state is alive, otherwise switches to the closest alive ancestor of the state with the given id
ancestor ids returns an identifier of the closest common ancestor of states with the given identifiers.
kill id kills a state with the specified id. If id corresponds to the current state, then switches to the closest ancestor. If id = global then do nothing.
forks xs returns a sequence of all alive states
include S2
  with type ('a, 'e) t := ('a, 'e) T2(M).t
   and type ('a, 'e) e := ('a, 'e) T2(M).e
   and type 'a m := 'a T2(M).minclude Monad2 with type ('a, 's) t := ('a, 's) T2(M).tsequence xs computes a sequence of computations xs in the left to right order.
forever xs creates a computationt that never returns.
module Fn : sig ... endVarious function combinators lifted into the Kleisli category.
module Pair : sig ... endThe pair interface lifted into the monad.
module Triple : sig ... endThe triple interface lifted into a monad.
module Lift : sig ... endLifts functions into the monad.
module Exn : sig ... endInteracting between monads and language exceptions
module Collection : sig ... endLifts collection interface into the monad.
module List : Collection.S with type 'a t := 'a listThe Monad.Collection.S2 interface for lists
module Seq : Collection.S with type 'a t := 'a Core_kernel.Sequence.tThe Monad.Collection.S2 interface for sequences
include Syntax.S2 with type ('a, 'e) t := ('a, 'e) T2(M).tf >=> g is fun x -> f x >>= g
val (!!) : 'a -> ('a, 'e) T2(M).t!!x is return x
!$$f is Lift.binary f
val (!$$$) : 
  ('a -> 'b -> 'c -> 'd) ->
  ('a, 'e) T2(M).t ->
  ('b, 'e) T2(M).t ->
  ('c, 'e) T2(M).t ->
  ('d, 'e) T2(M).t!$$$f is Lift.ternary f
include Syntax.Let.S2 with type ('a, 'e) t := ('a, 'e) T2(M).tlet* r = f x in b is f x >>= fun r -> b
let+ r = f x in b is f x >>| fun r -> b
include Core_kernel.Monad.S2 with type ('a, 'e) t := ('a, 'e) T2(M).tmodule Let_syntax : sig ... endmodule Monad_infix : sig ... endval return : 'a -> ('a, 'b) T2(M).tmodule Let : Syntax.Let.S2 with type ('a, 'e) t := ('a, 'e) T2(M).tMonadic Binding Operators.
Monadic operators, see Monad.Syntax.S2 for more.
val put : 's -> (unit, 's) T2(M).tput s changes the current state to s
val get : unit -> ('s, 's) T2(M).tget s gets the current state
val gets : ('s -> 'r) -> ('r, 's) T2(M).tgets p projects the current state with the function p
val update : ('s -> 's) -> (unit, 's) T2(M).tupdate f updates the current state with the function f