type ('input, 'action, 'model) apply_action =
inject:('action Action.t -> unit Ui_effect.t) ->
schedule_event:(unit Ui_effect.t -> unit) ->
'input option ->
'model ->
'action Action.t ->
'modeltype ('model, 'action, 'input, 'result, 'extra) info = {model : 'model Meta.Model.t;input : 'input Meta.Input.t;action : 'action Action.id;apply_action : ('input, 'action, 'model) apply_action;run : ('model, 'action, 'input, 'result, 'extra) eval_fun;reset : ('action, 'model) reset;may_contain : May_contain.Unresolved.t;
}type ('result, 'extra) packed_info = | T : (_, _, _, 'result, 'extra) info -> ('result, 'extra) packed_info