module Cf_scmonad:sig
..end
The state-continuation monad and its operators.
The state-continuation monad is provided here purely for reference purposes. It may be helpful as an example of how to lift the continuation monad into more complex monads.
type('s, 'x, 'a)
t =('s -> 'x, 'a) Cf_cmonad.t
The state-continuation monad.
module Op:sig
..end
The continuation monad: a function for passing intermediate results from continuation context to continuation context with an encapsulated state value at each stage.
val nil : ('s, 'x, unit) t
A monad that returns unit
and performs no operation.
val return : 'a -> ('s, 'x, 'a) t
Use return a
to produce a monad that returns a
as an intermediate
result from the current continuation.
val init : 'x -> ('s, 'x, 'a) t
Use init x
to produce a monad that discards the current intermediate
result and returns x
as the continuation context.
val cont : ('x -> 'x) -> ('s, 'x, unit) t
Use cont f
to produce a monad that passes the calling continuation to
the function f
and returns the unit value as an intermediate result.
val load : ('s, 'x, 's) t
A monad that returns the encapsulate state as an intermediate result.
val store : 's -> ('s, 'x, unit) t
Use store s
to produce a monad with s
as the value of its encapsulated
state.
val modify : ('s -> 's) -> ('s, 'x, unit) t
Use modify f
to produce a monad that applies f
to the encapsulated
state to obtain a new state value, and which returns the unit value as its
intermediate result.
val field : ('s -> 'a) -> ('s, 'x, 'a) t
Use field f
to produce a monad that returns the result of applying f
to
the value of the encapsulated state.
val down : ('s, 'x, unit) t -> 's -> ('x, 's) Cf_cmonad.t
Use down m s
to produce a stateless continuation monad from a
state-continuation monad and an initial state.
val lift : ('x, 'a) Cf_cmonad.t -> ('s, 'x, 'a) t
Use lift m
to lift a stateless continuation monad into a
state-continuation monad.