Module Logic_monad.BackState

type (+'a, -'i, +'o, 'e) t
val return : 'a -> ( 'a, 's, 's, 'e ) t
val (>>=) : ( 'a, 'i, 'm, 'e ) t -> ( 'a -> ( 'b, 'm, 'o, 'e ) t ) -> ( 'b, 'i, 'o, 'e ) t
val (>>) : ( unit, 'i, 'm, 'e ) t -> ( 'b, 'm, 'o, 'e ) t -> ( 'b, 'i, 'o, 'e ) t
val map : ( 'a -> 'b ) -> ( 'a, 'i, 'o, 'e ) t -> ( 'b, 'i, 'o, 'e ) t
val ignore : ( 'a, 'i, 'o, 'e ) t -> ( unit, 'i, 'o, 'e ) t
val set : 'o -> ( unit, 'i, 'o, 'e ) t
val get : ( 's, 's, 's, 'e ) t
val modify : ( 'i -> 'o ) -> ( unit, 'i, 'o, 'e ) t
val interleave : ( 'e1 -> 'e2 ) -> ( 'e2 -> 'e1 ) -> ( 'a, 'i, 'o, 'e1 ) t -> ( 'a, 'i, 'o, 'e2 ) t

interleave src dst m adapts the exceptional content of the monad according to the functions src and dst. To ensure a meaningful result, those functions must form a retraction, i.e. dst (src e1) = e1 for all e1. This is typically the case when the type 'e1 is unit.

val zero : 'e -> ( 'a, 'i, 'o, 'e ) t
val plus : ( 'a, 'i, 'o, 'e ) t -> ( 'e -> ( 'a, 'i, 'o, 'e ) t ) -> ( 'a, 'i, 'o, 'e ) t
val split : ( 'a, 's, 's, 'e ) t -> ( ( 'a, ( 'a, 'i, 's, 'e ) t, 'e ) list_view, 's, 's, 'e ) t
val once : ( 'a, 'i, 'o, 'e ) t -> ( 'a, 'i, 'o, 'e ) t
val break : ( 'e -> 'e option ) -> ( 'a, 'i, 'o, 'e ) t -> ( 'a, 'i, 'o, 'e ) t
val lift : 'a NonLogical.t -> ( 'a, 's, 's, 'e ) t
type ('a, 'e) reified
type ('a, 'e) reified_
val repr : ( 'a, 'e ) reified -> ( 'a, ( 'a, 'e ) reified_, 'e ) list_view_ NonLogical.t
val run : ( 'a, 'i, 'o, 'e ) t -> 'i -> ( 'a * 'o, 'e ) reified