Multi.Make
include Trans.S
with type 'a t := 'a T1(T)(M).t
with type 'a m := 'a T1(T)(M).m
with type 'a e := 'a T1(T)(M).e
val global : id
the identifier of the global (initial) state.
val fork : unit -> unit T1(T)(M).t
fork ()
forks the current state.
val switch : id -> unit T1(T)(M).t
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
val parent : unit -> id T1(T)(M).t
parent ()
returns an identifier of the closest alive parent.
val ancestor : id list -> id T1(T)(M).t
ancestor ids
returns an identifier of the closest common ancestor of states with the given identifiers.
val current : unit -> id T1(T)(M).t
current id
returns an identifier of current state.
val kill : id -> unit T1(T)(M).t
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.
val forks : unit -> id Core_kernel.Sequence.t T1(T)(M).t
forks xs
returns a sequence of all alive states
val status : id -> status T1(T)(M).t
status id
returns a status of a state with the given id
include S
with type 'a t := 'a T1(T)(M).t
and type 'a e := 'a T1(T)(M).e
and type 'a m := 'a T1(T)(M).m
with type env := T.t
include Trans.S
with type 'a t := 'a T1(T)(M).t
with type 'a e := 'a T1(T)(M).e
with type 'a m := 'a T1(T)(M).m
val lift : 'a T1(T)(M).m -> 'a T1(T)(M).t
lifts inner monad into the resulting monad
val run : 'a T1(T)(M).t -> 'a T1(T)(M).e
runs the computation
include Monad with type 'a t := 'a T1(T)(M).t
val void : 'a T1(T)(M).t -> unit T1(T)(M).t
void m
computes m
and discrards the result.
val sequence : unit T1(T)(M).t list -> unit T1(T)(M).t
sequence xs
computes a sequence of computations xs
in the left to right order.
val forever : 'a T1(T)(M).t -> 'b T1(T)(M).t
forever xs
creates a computationt that never returns.
module Fn : sig ... end
Various function combinators lifted into the Kleisli category.
module Pair : sig ... end
The pair interface lifted into the monad.
module Triple : sig ... end
The triple interface lifted into a monad.
module Lift : sig ... end
Lifts functions into the monad.
module Exn : sig ... end
Interacting between monads and language exceptions
module Collection : sig ... end
Lifts collection interface into the monad.
module List : Collection.S with type 'a t := 'a list
The Monad.Collection.S interface for lists
module Seq : Collection.S with type 'a t := 'a Core_kernel.Sequence.t
The Monad.Collection.S interface for sequences
include Syntax.S with type 'a t := 'a T1(T)(M).t
val (>=>) :
('a -> 'b T1(T)(M).t) ->
('b -> 'c T1(T)(M).t) ->
'a ->
'c T1(T)(M).t
f >=> g
is fun x -> f x >>= g
val (!!) : 'a -> 'a T1(T)(M).t
!!x
is return x
val (!$) : ('a -> 'b) -> 'a T1(T)(M).t -> 'b T1(T)(M).t
!$f
is Lift.unary f
val (!$$) : ('a -> 'b -> 'c) -> 'a T1(T)(M).t -> 'b T1(T)(M).t -> 'c T1(T)(M).t
!$$f
is Lift.binary f
val (!$$$) :
('a -> 'b -> 'c -> 'd) ->
'a T1(T)(M).t ->
'b T1(T)(M).t ->
'c T1(T)(M).t ->
'd T1(T)(M).t
!$$$f
is Lift.ternary f
val (!$$$$) :
('a -> 'b -> 'c -> 'd -> 'e) ->
'a T1(T)(M).t ->
'b T1(T)(M).t ->
'c T1(T)(M).t ->
'd T1(T)(M).t ->
'e T1(T)(M).t
!$$$$f
is Lift.quaternary f
val (!$$$$$) :
('a -> 'b -> 'c -> 'd -> 'e -> 'f) ->
'a T1(T)(M).t ->
'b T1(T)(M).t ->
'c T1(T)(M).t ->
'd T1(T)(M).t ->
'e T1(T)(M).t ->
'f T1(T)(M).t
!$$$$$f
is Lift.quinary f
include Syntax.Let.S with type 'a t := 'a T1(T)(M).t
val let* : 'a T1(T)(M).t -> ('a -> 'b T1(T)(M).t) -> 'b T1(T)(M).t
let* r = f x in b
is f x >>= fun r -> b
val and* : 'a T1(T)(M).t -> 'b T1(T)(M).t -> ('a * 'b) T1(T)(M).t
monoidal product
val let+ : 'a T1(T)(M).t -> ('a -> 'b) -> 'b T1(T)(M).t
let+ r = f x in b
is f x >>| fun r -> b
val and+ : 'a T1(T)(M).t -> 'b T1(T)(M).t -> ('a * 'b) T1(T)(M).t
monoidal product
include Core_kernel.Monad.S with type 'a t := 'a T1(T)(M).t
val (>>=) : 'a T1(T)(M).t -> ('a -> 'b T1(T)(M).t) -> 'b T1(T)(M).t
val (>>|) : 'a T1(T)(M).t -> ('a -> 'b) -> 'b T1(T)(M).t
module Monad_infix : sig ... end
val bind : 'a T1(T)(M).t -> f:('a -> 'b T1(T)(M).t) -> 'b T1(T)(M).t
val return : 'a -> 'a T1(T)(M).t
val map : 'a T1(T)(M).t -> f:('a -> 'b) -> 'b T1(T)(M).t
val join : 'a T1(T)(M).t T1(T)(M).t -> 'a T1(T)(M).t
val ignore_m : 'a T1(T)(M).t -> unit T1(T)(M).t
val all : 'a T1(T)(M).t list -> 'a list T1(T)(M).t
val all_unit : unit T1(T)(M).t list -> unit T1(T)(M).t
module Let_syntax : sig ... end
module Let : Syntax.Let.S with type 'a t := 'a T1(T)(M).t
Monadic operators, see Monad.Syntax.S for more.
module Syntax : Syntax.S with type 'a t := 'a T1(T)(M).t
Monadic operators, see Monad.Syntax.S for more.
val put : T.t -> unit T1(T)(M).t
put s
changes the current state to s
val get : unit -> T.t T1(T)(M).t
get s
gets the current state
val gets : (T.t -> 'r) -> 'r T1(T)(M).t
gets p
projects the current state with the function p
val update : (T.t -> T.t) -> unit T1(T)(M).t
update f
updates the current state with the function f