Module SM.Producer

type 'a symex := 'a t
type subst := Value.Expr.Subst.t
include Soteria.Soteria_std.Monad.S
include Soteria.Soteria_std.Monad.Base
type 'a t
val return : 'a -> 'a t
val bind : 'a t -> ('a -> 'b t) -> 'b t
val map : 'a t -> ('a -> 'b) -> 'b t
val all : ('a -> 'b t) -> 'a list -> 'b list t
val fold_list : init:'a -> f:('a -> 'elem -> 'a t) -> 'elem list -> 'a t
val lift : 'a symex -> 'a t
val vanish : unit -> 'a t
val apply_subst : ((Value.Expr.t -> 'a Value.t) -> 'syn -> 'sem) -> 'syn -> 'sem t
val produce_pure : Value.Expr.t -> unit t
val run : subst:subst -> 'a t -> ('a * subst) symex
val run_identity : 'a t -> 'a symex
module Syntax : sig ... end