Monad.State
The State Monad.
The state monad denotes a generic effectful computation. Unlike Writer
and Reader
the State
monad can perform arbitrary transformations on state. However, the same as withReader
, the State monad comes in two flavors - with a type of state fixed at module level, or with a type of state left to be a type variable. In both cases the type of state remains constant during the computation. There is no difference in implementation, these are just two different interfaces.
an abstract type of stateful computations. The type variable 'a
denotes types of values and the type variable 'e
denotes a type of the state (aka environment, aka world).
module type S = sig ... end
The State Monad interface with a fixed environment.
module type S2 = sig ... end
module Multi : sig ... end
The Multi State monad.
include S2
with type ('a, 'e) t = (('a, 'e) storage, 'e) state
and type 'a m = 'a
and type ('a, 'e) e = 'e -> 'a * 'e
include Monad2 with type ('a, 's) t := ('a, 's) t
sequence xs
computes a sequence of computations xs
in the left to right order.
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.S2 interface for lists
module Seq : Collection.S with type 'a t := 'a Core_kernel.Sequence.t
The Monad.Collection.S2 interface for sequences
include Syntax.Let.S2 with type ('a, 'e) t := ('a, 'e) t
include Core_kernel.Monad.S2 with type ('a, 'e) t := ('a, 'e) t
module Let_syntax : sig ... end
module Monad_infix : sig ... end
val return : 'a -> ('a, 'b) t
module Let : Syntax.Let.S2 with type ('a, 'e) t := ('a, 'e) t
Monadic Binding Operators.
Monadic operators, see Monad.Syntax.S2 for more.
val put : 's -> (unit, 's) t
put s
changes the current state to s
val get : unit -> ('s, 's) t
get s
gets the current state
val gets : ('s -> 'r) -> ('r, 's) t
gets p
projects the current state with the function p
val update : ('s -> 's) -> (unit, 's) t
update f
updates the current state with the function f
val eval : ('a, 'e) t -> 'e -> 'a
eval m
is the same as run m >>| fst
, i.e., it runs the computation and returns the computed value.
val exec : ('a, 'e) t -> 'e -> 'e
exec m
is the same as run m >>| snd
, i.e., it runs the computation and returns the final state.
module Make
(T : Core_kernel.T)
(M : Monad) :
S
with type 'a t := 'a T1(T)(M).t
and type 'a m := 'a T1(T)(M).m
and type 'a e := 'a T1(T)(M).e
and type env := T.t