Module Mavryk_layer2_store.Delayed_write_monad

Monad for values with delayed write effects

type ('a, 'store) t

Type to encapsulate values with a callback that should write to disk. This allows to delay some writes to a location where we have write access to the context.

val no_write : 'a -> ('a, _) t

no_write v returns v together with a write function that does nothing.

val delay_write : 'a -> ('store -> unit Mavryk_base.TzPervasives.tzresult Lwt.t) -> ('a, 'store) t

delay_write v write returns a delayed write version of v with the write function to be called later.

val map : ('a -> 'b) -> ('a, 'store) t -> ('b, 'store) t

map f dw returns the delayed write dw where f is applied to the encapsulated value.

val map_es : ('a -> ('b, 'c) Stdlib.result Lwt.t) -> ('a, 'store) t -> (('b, 'store) t, 'c) Stdlib.result Lwt.t

map_es is like map in the Lwt result monad.

val bind : ('a -> ('b, 'store) t) -> ('a, 'store) t -> ('b, 'store) t

bind f dw returns a delayed write value where f is applied to the encapsulated value and the write effects of f are added to the effects of dw.

val apply : 'store -> ('a, 'store) t -> 'a Mavryk_base.TzPervasives.tzresult Lwt.t

apply node_ctxt dw applies the write effects on the context node_ctxt and returns the encapsulated value.

val ignore : ('a, _) t -> 'a

ignore dw ignores the write effects and returns the encapsulated value.

module Lwt_result_syntax : sig ... end