Module Logic_monad.Logical

Parameters

module P : Param

Signature

include Monad.S
include Monad.Def
type +'a t
val return : 'a -> 'a t
val (>>=) : 'a t -> ( 'a -> 'b t ) -> 'b t
val (>>) : unit t -> 'a t -> 'a t
val map : ( 'a -> 'b ) -> 'a t -> 'b t

The monadic laws must hold:

  • (x>>=f)>>=g = x>>=fun x' -> (f x'>>=g)
  • return a >>= f = f a
  • x>>=return = x

As well as the following identities:

  • x >> y = x >>= fun () -> y
  • map f x = x >>= fun x' -> f x'
module List : Monad.ListS with type 'a t := 'a t
val ignore : 'a t -> unit t
val set : P.s -> unit t
val get : P.s t
val modify : ( P.s -> P.s ) -> unit t
val put : P.w -> unit t
val current : P.e t
val local : P.e -> 'a t -> 'a t
val update : ( P.u -> P.u ) -> unit t
val zero : Exninfo.iexn -> 'a t
val plus : 'a t -> ( Exninfo.iexn -> 'a t ) -> 'a t
val split : 'a t -> ( 'a, 'a t, Exninfo.iexn ) list_view t
val once : 'a t -> 'a t
val break : ( Exninfo.iexn -> Exninfo.iexn option ) -> 'a t -> 'a t
val lift : 'a NonLogical.t -> 'a t
type 'a reified = ( 'a, Exninfo.iexn ) BackState.reified
type 'a reified_ = ( 'a, Exninfo.iexn ) BackState.reified_
val repr : 'a reified -> ( 'a, 'a reified_, Exninfo.iexn ) list_view_ NonLogical.t
val run : 'a t -> P.e -> P.s -> ('a * P.s * P.w * P.u) reified
module Unsafe : sig ... end