Mavryk_raw_protocol_alpha.Gas_monadThis monad combines:
It is useful for backtracking on type checking errors without backtracking the consumed gas.
type ('a, 'trace) gas_monad = ('a, 'trace) tAlias of ('a, 'trace) t to avoid confusion when the module is open
val return : 'a -> ('a, 'trace) treturn x returns a value in the gas-monad.
map f m maps over successful results of m using f.
bind m f binds successful results of m and feeds it to f.
val bind_recover :
('a, 'trace) t ->
(('a, 'trace) Mavryk_protocol_environment_alpha.Pervasives.result ->
('b, 'trace') t) ->
('b, 'trace') tbind_recover m f binds the result of m and feeds it to f. It's another variant of bind that allows recovery from inner errors.
val of_result :
('a, 'trace) Mavryk_protocol_environment_alpha.Pervasives.result ->
('a, 'trace) tof_result r is a gas-free embedding of the result r into the gas monad.
val consume_gas : Alpha_context.Gas.cost -> (unit, 'trace) tconsume_gas c consumes c amounts of gas. It's a wrapper around Gas.consume. If that fails, the whole computation within the gas-monad returns an error. See the Alpha_context.Gas module for details.
val run :
Alpha_context.context ->
('a, 'trace) t ->
(('a, 'trace) Mavryk_protocol_environment_alpha.Pervasives.result
* Alpha_context.context)
Mavryk_protocol_environment_alpha.Error_monad.tzresultrun ctxt m runs m using the given context and returns the result along with the new context with updated gas. If the given context has unlimited mode enabled, through Gas.set_unlimited, no gas is consumed.
val record_trace_eval :
error_details:('error_context, 'error_trace) Script_tc_errors.error_details ->
('error_context -> Mavryk_protocol_environment_alpha.Error_monad.error) ->
('a, 'error_trace) t ->
('a, 'error_trace) trecord_trace_level ~error_details f m returns a new gas-monad value that when run, records trace levels using f. This function has no effect in the case of a gas-exhaustion error or if error_details is Fast.
val fail : 'trace -> ('a, 'trace) tfail e is return (Error e) .