1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27
|
type 'a actions = 'a Action.t list
type 'a t = {
default_action : 'a Action.t;
mutable handler : (unit -> 'a);
}
let run t = t.handler ()
let set_handler t f = t.handler <- f
let seq t actions =
let actions = ref actions in
let next () =
match !actions with
| [] -> Action.run t.default_action
| x :: xs ->
actions := xs;
Action.run x
in
set_handler t next
let run_default_action t =
Action.run t.default_action
let make default_action =
{ default_action; handler = (fun () -> Action.run default_action) }
|