machine_handler_phases.bend
bendvy-ecs-core@0.1.0.0 · 110 lines · 0 definitions
1import Base
2import bendvy-ecs-core@0.1.0.0/world.bend as W
3import bendvy-ecs-core@0.1.0.0/system.bend as Sys
4import bendvy-ecs-core@0.1.0.0/machine.bend as M
5import bendvy-ecs-core@0.1.0.0/machine_handlers.bend as H
6import bendvy-ecs-core@0.1.0.0/machine_handler_engine.bend as Engine
7
8# Generic existing handler prepare/commit/retry sequencing; C and R remain affine Type.
9type Intent<V:Data> is Data:
10 Idle{}
11 Ready{from:V,to:V,skipSame:Bool}
12 InitialReady{to:V}
13type Owners<S:Data,K:Data,V:Data,C:Type,R:Type,E:Data,-runner:W.World<S,C,R,E> -> H.Invocation<V> -> Sys.Outcome<W.World<S,C,R,E>,String,Unit>> is Type:
14 Owners{handlers:H.Owners<S,C,R,E,V,runner>,intent:Intent<V>}
15def published_with(~S:Data,~K:Data,~V:Data,~C:Type,~R:Type,~E:Data,~runner:W.World<S,C,R,E> -> H.Invocation<V> -> Sys.Outcome<W.World<S,C,R,E>,String,Unit>,~State:Type,~invoke:H.Entry<S,C,R,E,V,runner> -> State -> H.Phase -> V -> V -> H.Entry<S,C,R,E,V,runner> & Sys.Outcome<State,String,Unit>,~initial:H.Entry<S,C,R,E,V,runner> -> State -> V -> H.Entry<S,C,R,E,V,runner> & Sys.Outcome<State,String,Unit>,~take:State -> State & M.Slot<S,K,V>,~put:State -> M.Slot<S,K,V> -> State,~publish:State -> M.Transition<V> -> State,~same:V -> V -> Bool,~frame:State -> State,world:State,event:M.Transition<V>) -> State:publish(world,event)
16
17def requeued_with(~S:Data,~K:Data,~V:Data,~C:Type,~R:Type,~E:Data,~runner:W.World<S,C,R,E> -> H.Invocation<V> -> Sys.Outcome<W.World<S,C,R,E>,String,Unit>,~State:Type,~invoke:H.Entry<S,C,R,E,V,runner> -> State -> H.Phase -> V -> V -> H.Entry<S,C,R,E,V,runner> & Sys.Outcome<State,String,Unit>,~initial:H.Entry<S,C,R,E,V,runner> -> State -> V -> H.Entry<S,C,R,E,V,runner> & Sys.Outcome<State,String,Unit>,~take:State -> State & M.Slot<S,K,V>,~put:State -> M.Slot<S,K,V> -> State,~publish:State -> M.Transition<V> -> State,~same:V -> V -> Bool,~frame:State -> State,to:V,skipSame:Bool,pair:State & M.Slot<S,K,V>) -> State:
18 (world,slot)=pair
19 put(world,M.queue(~S,~K,~V,slot,to,skipSame))
20
21def committed_with(~S:Data,~K:Data,~V:Data,~C:Type,~R:Type,~E:Data,~runner:W.World<S,C,R,E> -> H.Invocation<V> -> Sys.Outcome<W.World<S,C,R,E>,String,Unit>,~State:Type,~invoke:H.Entry<S,C,R,E,V,runner> -> State -> H.Phase -> V -> V -> H.Entry<S,C,R,E,V,runner> & Sys.Outcome<State,String,Unit>,~initial:H.Entry<S,C,R,E,V,runner> -> State -> V -> H.Entry<S,C,R,E,V,runner> & Sys.Outcome<State,String,Unit>,~take:State -> State & M.Slot<S,K,V>,~put:State -> M.Slot<S,K,V> -> State,~publish:State -> M.Transition<V> -> State,~same:V -> V -> Bool,~frame:State -> State,+from:V,+to:V,pair:State & M.Slot<S,K,V>) -> State:
22 (world,slot)=pair
23 published_with(~S,~K,~V,~C,~R,~E,~runner,~State,~invoke,~initial,~take,~put,~publish,~same,~frame,put(world,H.committed(~S,~K,~V,slot,from,to)),M.Transition{from,to})
24
25def prepared_with(~S:Data,~K:Data,~V:Data,~C:Type,~R:Type,~E:Data,~runner:W.World<S,C,R,E> -> H.Invocation<V> -> Sys.Outcome<W.World<S,C,R,E>,String,Unit>,~State:Type,~invoke:H.Entry<S,C,R,E,V,runner> -> State -> H.Phase -> V -> V -> H.Entry<S,C,R,E,V,runner> & Sys.Outcome<State,String,Unit>,~initial:H.Entry<S,C,R,E,V,runner> -> State -> V -> H.Entry<S,C,R,E,V,runner> & Sys.Outcome<State,String,Unit>,~take:State -> State & M.Slot<S,K,V>,~put:State -> M.Slot<S,K,V> -> State,~publish:State -> M.Transition<V> -> State,~same:V -> V -> Bool,~frame:State -> State,handlers:H.Owners<S,C,R,E,V,runner>,world:State,value:H.Prepared<S,K,V>) -> Owners<S,K,V,C,R,E,runner> & Sys.Outcome<State,String,Unit>:
26 match value:
27 case H.Idle{slot}:(Owners{handlers,Idle{}},Sys.Succeeded{put(world,slot),Unit{}})
28 case H.Ready{slot,M.Initial{to},_}:(Owners{handlers,InitialReady{to}},Sys.Succeeded{put(world,slot),Unit{}})
29 case H.Ready{slot,M.Transition{from,to},skipSame}:(Owners{handlers,Ready{from,to,skipSame}},Sys.Succeeded{put(world,slot),Unit{}})
30
31def captured_with(~S:Data,~K:Data,~V:Data,~C:Type,~R:Type,~E:Data,~runner:W.World<S,C,R,E> -> H.Invocation<V> -> Sys.Outcome<W.World<S,C,R,E>,String,Unit>,~State:Type,~invoke:H.Entry<S,C,R,E,V,runner> -> State -> H.Phase -> V -> V -> H.Entry<S,C,R,E,V,runner> & Sys.Outcome<State,String,Unit>,~initial:H.Entry<S,C,R,E,V,runner> -> State -> V -> H.Entry<S,C,R,E,V,runner> & Sys.Outcome<State,String,Unit>,~take:State -> State & M.Slot<S,K,V>,~put:State -> M.Slot<S,K,V> -> State,~publish:State -> M.Transition<V> -> State,~same:V -> V -> Bool,~frame:State -> State,handlers:H.Owners<S,C,R,E,V,runner>,pair:State & M.Slot<S,K,V>) -> Owners<S,K,V,C,R,E,runner> & Sys.Outcome<State,String,Unit>:
32 (world,+slot)=pair
33 prepared_with(~S,~K,~V,~C,~R,~E,~runner,~State,~invoke,~initial,~take,~put,~publish,~same,~frame,handlers,world,H.prepare(~S,~K,~V,~same,slot,M.snapshot(~S,~K,~V,slot)))
34
35def apply_with(~S:Data,~K:Data,~V:Data,~C:Type,~R:Type,~E:Data,~runner:W.World<S,C,R,E> -> H.Invocation<V> -> Sys.Outcome<W.World<S,C,R,E>,String,Unit>,~State:Type,~invoke:H.Entry<S,C,R,E,V,runner> -> State -> H.Phase -> V -> V -> H.Entry<S,C,R,E,V,runner> & Sys.Outcome<State,String,Unit>,~initial:H.Entry<S,C,R,E,V,runner> -> State -> V -> H.Entry<S,C,R,E,V,runner> & Sys.Outcome<State,String,Unit>,~take:State -> State & M.Slot<S,K,V>,~put:State -> M.Slot<S,K,V> -> State,~publish:State -> M.Transition<V> -> State,~same:V -> V -> Bool,~frame:State -> State,owners:Owners<S,K,V,C,R,E,runner>,world:State) -> Owners<S,K,V,C,R,E,runner> & Sys.Outcome<State,String,Unit>:
36 match owners:
37 case Owners{handlers,_}:captured_with(~S,~K,~V,~C,~R,~E,~runner,~State,~invoke,~initial,~take,~put,~publish,~same,~frame,handlers,take(frame(world)))
38
39def exited_with(~S:Data,~K:Data,~V:Data,~C:Type,~R:Type,~E:Data,~runner:W.World<S,C,R,E> -> H.Invocation<V> -> Sys.Outcome<W.World<S,C,R,E>,String,Unit>,~State:Type,~invoke:H.Entry<S,C,R,E,V,runner> -> State -> H.Phase -> V -> V -> H.Entry<S,C,R,E,V,runner> & Sys.Outcome<State,String,Unit>,~initial:H.Entry<S,C,R,E,V,runner> -> State -> V -> H.Entry<S,C,R,E,V,runner> & Sys.Outcome<State,String,Unit>,~take:State -> State & M.Slot<S,K,V>,~put:State -> M.Slot<S,K,V> -> State,~publish:State -> M.Transition<V> -> State,~same:V -> V -> Bool,~frame:State -> State,transition:List<&1,H.Entry<S,C,R,E,V,runner>>,enter:List<&1,H.Entry<S,C,R,E,V,runner>>,+from:V,+to:V,+skipSame:Bool,result:Engine.PhaseResult<State,H.Entry<S,C,R,E,V,runner>>) -> Owners<S,K,V,C,R,E,runner> & Sys.Outcome<State,String,Unit>:
40 match result:
41 case Engine.Complete{exit,world}:(Owners{H.Owners{exit,transition,enter},Ready{from,to,skipSame}},Sys.Succeeded{world,Unit{}})
42 case Engine.Failed{exit,world,error}:(Owners{H.Owners{exit,transition,enter},Ready{from,to,skipSame}},Sys.Failed{requeued_with(~S,~K,~V,~C,~R,~E,~runner,~State,~invoke,~initial,~take,~put,~publish,~same,~frame,to,skipSame,take(world)),error})
43
44def exit_with(~S:Data,~K:Data,~V:Data,~C:Type,~R:Type,~E:Data,~runner:W.World<S,C,R,E> -> H.Invocation<V> -> Sys.Outcome<W.World<S,C,R,E>,String,Unit>,~State:Type,~invoke:H.Entry<S,C,R,E,V,runner> -> State -> H.Phase -> V -> V -> H.Entry<S,C,R,E,V,runner> & Sys.Outcome<State,String,Unit>,~initial:H.Entry<S,C,R,E,V,runner> -> State -> V -> H.Entry<S,C,R,E,V,runner> & Sys.Outcome<State,String,Unit>,~take:State -> State & M.Slot<S,K,V>,~put:State -> M.Slot<S,K,V> -> State,~publish:State -> M.Transition<V> -> State,~same:V -> V -> Bool,~frame:State -> State,owners:Owners<S,K,V,C,R,E,runner>,world:State) -> Owners<S,K,V,C,R,E,runner> & Sys.Outcome<State,String,Unit>:
45 match owners:
46 case Owners{handlers,Idle{}}:(Owners{handlers,Idle{}},Sys.Succeeded{world,Unit{}})
47 case Owners{handlers,InitialReady{to}}:(Owners{handlers,InitialReady{to}},Sys.Succeeded{world,Unit{}})
48 case Owners{H.Owners{exit,transition,enter},Ready{+from,+to,+skipSame}}:exited_with(~S,~K,~V,~C,~R,~E,~runner,~State,~invoke,~initial,~take,~put,~publish,~same,~frame,transition,enter,from,to,skipSame,Engine.run_phase(~S,~State,~H.Entry<S,C,R,E,V,runner>,~H.Phase,~V,~invoke,~initial,~H.Exit{},~H.Transition{},~H.Enter{},exit,world,H.Exit{},from,to,None{}))
49
50def transitioned_with(~S:Data,~K:Data,~V:Data,~C:Type,~R:Type,~E:Data,~runner:W.World<S,C,R,E> -> H.Invocation<V> -> Sys.Outcome<W.World<S,C,R,E>,String,Unit>,~State:Type,~invoke:H.Entry<S,C,R,E,V,runner> -> State -> H.Phase -> V -> V -> H.Entry<S,C,R,E,V,runner> & Sys.Outcome<State,String,Unit>,~initial:H.Entry<S,C,R,E,V,runner> -> State -> V -> H.Entry<S,C,R,E,V,runner> & Sys.Outcome<State,String,Unit>,~take:State -> State & M.Slot<S,K,V>,~put:State -> M.Slot<S,K,V> -> State,~publish:State -> M.Transition<V> -> State,~same:V -> V -> Bool,~frame:State -> State,exit:List<&1,H.Entry<S,C,R,E,V,runner>>,enter:List<&1,H.Entry<S,C,R,E,V,runner>>,+from:V,+to:V,+skipSame:Bool,result:Engine.PhaseResult<State,H.Entry<S,C,R,E,V,runner>>) -> Owners<S,K,V,C,R,E,runner> & Sys.Outcome<State,String,Unit>:
51 match result:
52 case Engine.Complete{transition,world}:(Owners{H.Owners{exit,transition,enter},Ready{from,to,skipSame}},Sys.Succeeded{committed_with(~S,~K,~V,~C,~R,~E,~runner,~State,~invoke,~initial,~take,~put,~publish,~same,~frame,from,to,take(world)),Unit{}})
53 case Engine.Failed{transition,world,error}:(Owners{H.Owners{exit,transition,enter},Ready{from,to,skipSame}},Sys.Failed{requeued_with(~S,~K,~V,~C,~R,~E,~runner,~State,~invoke,~initial,~take,~put,~publish,~same,~frame,to,skipSame,take(world)),error})
54
55def transition_with(~S:Data,~K:Data,~V:Data,~C:Type,~R:Type,~E:Data,~runner:W.World<S,C,R,E> -> H.Invocation<V> -> Sys.Outcome<W.World<S,C,R,E>,String,Unit>,~State:Type,~invoke:H.Entry<S,C,R,E,V,runner> -> State -> H.Phase -> V -> V -> H.Entry<S,C,R,E,V,runner> & Sys.Outcome<State,String,Unit>,~initial:H.Entry<S,C,R,E,V,runner> -> State -> V -> H.Entry<S,C,R,E,V,runner> & Sys.Outcome<State,String,Unit>,~take:State -> State & M.Slot<S,K,V>,~put:State -> M.Slot<S,K,V> -> State,~publish:State -> M.Transition<V> -> State,~same:V -> V -> Bool,~frame:State -> State,owners:Owners<S,K,V,C,R,E,runner>,world:State) -> Owners<S,K,V,C,R,E,runner> & Sys.Outcome<State,String,Unit>:
56 match owners:
57 case Owners{handlers,Idle{}}:(Owners{handlers,Idle{}},Sys.Succeeded{world,Unit{}})
58 case Owners{handlers,InitialReady{to}}:(Owners{handlers,InitialReady{to}},Sys.Succeeded{world,Unit{}})
59 case Owners{H.Owners{exit,transition,enter},Ready{+from,+to,+skipSame}}:transitioned_with(~S,~K,~V,~C,~R,~E,~runner,~State,~invoke,~initial,~take,~put,~publish,~same,~frame,exit,enter,from,to,skipSame,Engine.run_phase(~S,~State,~H.Entry<S,C,R,E,V,runner>,~H.Phase,~V,~invoke,~initial,~H.Exit{},~H.Transition{},~H.Enter{},transition,world,H.Transition{},from,to,None{}))
60
61def entered_with(~S:Data,~K:Data,~V:Data,~C:Type,~R:Type,~E:Data,~runner:W.World<S,C,R,E> -> H.Invocation<V> -> Sys.Outcome<W.World<S,C,R,E>,String,Unit>,~State:Type,~invoke:H.Entry<S,C,R,E,V,runner> -> State -> H.Phase -> V -> V -> H.Entry<S,C,R,E,V,runner> & Sys.Outcome<State,String,Unit>,~initial:H.Entry<S,C,R,E,V,runner> -> State -> V -> H.Entry<S,C,R,E,V,runner> & Sys.Outcome<State,String,Unit>,~take:State -> State & M.Slot<S,K,V>,~put:State -> M.Slot<S,K,V> -> State,~publish:State -> M.Transition<V> -> State,~same:V -> V -> Bool,~frame:State -> State,exit:List<&1,H.Entry<S,C,R,E,V,runner>>,transition:List<&1,H.Entry<S,C,R,E,V,runner>>,intent:Intent<V>,result:Engine.PhaseResult<State,H.Entry<S,C,R,E,V,runner>>) -> Owners<S,K,V,C,R,E,runner> & Sys.Outcome<State,String,Unit>:
62 match result:
63 case Engine.Complete{enter,world}:(Owners{H.Owners{exit,transition,enter},intent},Sys.Succeeded{world,Unit{}})
64 case Engine.Failed{enter,world,error}:(Owners{H.Owners{exit,transition,enter},intent},Sys.Failed{world,error})
65
66def enter_with(~S:Data,~K:Data,~V:Data,~C:Type,~R:Type,~E:Data,~runner:W.World<S,C,R,E> -> H.Invocation<V> -> Sys.Outcome<W.World<S,C,R,E>,String,Unit>,~State:Type,~invoke:H.Entry<S,C,R,E,V,runner> -> State -> H.Phase -> V -> V -> H.Entry<S,C,R,E,V,runner> & Sys.Outcome<State,String,Unit>,~initial:H.Entry<S,C,R,E,V,runner> -> State -> V -> H.Entry<S,C,R,E,V,runner> & Sys.Outcome<State,String,Unit>,~take:State -> State & M.Slot<S,K,V>,~put:State -> M.Slot<S,K,V> -> State,~publish:State -> M.Transition<V> -> State,~same:V -> V -> Bool,~frame:State -> State,owners:Owners<S,K,V,C,R,E,runner>,world:State) -> Owners<S,K,V,C,R,E,runner> & Sys.Outcome<State,String,Unit>:
67 match owners:
68 case Owners{handlers,Idle{}}:(Owners{handlers,Idle{}},Sys.Succeeded{world,Unit{}})
69 case Owners{H.Owners{exit,transition,enter},InitialReady{+to}}:entered_with(~S,~K,~V,~C,~R,~E,~runner,~State,~invoke,~initial,~take,~put,~publish,~same,~frame,exit,transition,InitialReady{to},Engine.run_initial(~S,~State,~H.Entry<S,C,R,E,V,runner>,~H.Phase,~V,~invoke,~initial,~H.Exit{},~H.Transition{},~H.Enter{},enter,world,to,None{}))
70 case Owners{H.Owners{exit,transition,enter},Ready{+from,+to,+skipSame}}:entered_with(~S,~K,~V,~C,~R,~E,~runner,~State,~invoke,~initial,~take,~put,~publish,~same,~frame,exit,transition,Ready{from,to,skipSame},Engine.run_phase(~S,~State,~H.Entry<S,C,R,E,V,runner>,~H.Phase,~V,~invoke,~initial,~H.Exit{},~H.Transition{},~H.Enter{},enter,world,H.Enter{},from,to,None{}))
71
72def engine_result(~S:Data,~C:Type,~R:Type,~E:Data,~V:Data,~runner:W.World<S,C,R,E> -> H.Invocation<V> -> Sys.Outcome<W.World<S,C,R,E>,String,Unit>,value:H.PhaseResult<S,C,R,E,V,runner>) -> Engine.PhaseResult<W.World<S,C,R,E>,H.Entry<S,C,R,E,V,runner>>:
73 match value:
74 case H.Complete{entries,world}:Engine.Complete{entries,world}
75 case H.Failed{entries,world,error}:Engine.Failed{entries,world,error}
76def published(~S:Data,~K:Data,~V:Data,~C:Type,~R:Type,~E:Data,~runner:W.World<S,C,R,E> -> H.Invocation<V> -> Sys.Outcome<W.World<S,C,R,E>,String,Unit>,~take:W.World<S,C,R,E> -> W.World<S,C,R,E> & M.Slot<S,K,V>,~put:W.World<S,C,R,E> -> M.Slot<S,K,V> -> W.World<S,C,R,E>,~publish:W.World<S,C,R,E> -> M.Transition<V> -> W.World<S,C,R,E>,~same:V -> V -> Bool,~frame:W.World<S,C,R,E> -> W.World<S,C,R,E>,world:W.World<S,C,R,E>,event:M.Transition<V>) -> W.World<S,C,R,E>:
77 published_with(~S,~K,~V,~C,~R,~E,~runner,~W.World<S,C,R,E>,~H.invoke_phase(~S,~C,~R,~E,~V,~runner),~H.invoke_initial(~S,~C,~R,~E,~V,~runner),~take,~put,~publish,~same,~frame,world,event)
78
79def requeued(~S:Data,~K:Data,~V:Data,~C:Type,~R:Type,~E:Data,~runner:W.World<S,C,R,E> -> H.Invocation<V> -> Sys.Outcome<W.World<S,C,R,E>,String,Unit>,~take:W.World<S,C,R,E> -> W.World<S,C,R,E> & M.Slot<S,K,V>,~put:W.World<S,C,R,E> -> M.Slot<S,K,V> -> W.World<S,C,R,E>,~publish:W.World<S,C,R,E> -> M.Transition<V> -> W.World<S,C,R,E>,~same:V -> V -> Bool,~frame:W.World<S,C,R,E> -> W.World<S,C,R,E>,to:V,skipSame:Bool,pair:W.World<S,C,R,E> & M.Slot<S,K,V>) -> W.World<S,C,R,E>:
80 requeued_with(~S,~K,~V,~C,~R,~E,~runner,~W.World<S,C,R,E>,~H.invoke_phase(~S,~C,~R,~E,~V,~runner),~H.invoke_initial(~S,~C,~R,~E,~V,~runner),~take,~put,~publish,~same,~frame,to,skipSame,pair)
81
82def committed(~S:Data,~K:Data,~V:Data,~C:Type,~R:Type,~E:Data,~runner:W.World<S,C,R,E> -> H.Invocation<V> -> Sys.Outcome<W.World<S,C,R,E>,String,Unit>,~take:W.World<S,C,R,E> -> W.World<S,C,R,E> & M.Slot<S,K,V>,~put:W.World<S,C,R,E> -> M.Slot<S,K,V> -> W.World<S,C,R,E>,~publish:W.World<S,C,R,E> -> M.Transition<V> -> W.World<S,C,R,E>,~same:V -> V -> Bool,~frame:W.World<S,C,R,E> -> W.World<S,C,R,E>,+from:V,+to:V,pair:W.World<S,C,R,E> & M.Slot<S,K,V>) -> W.World<S,C,R,E>:
83 committed_with(~S,~K,~V,~C,~R,~E,~runner,~W.World<S,C,R,E>,~H.invoke_phase(~S,~C,~R,~E,~V,~runner),~H.invoke_initial(~S,~C,~R,~E,~V,~runner),~take,~put,~publish,~same,~frame,from,to,pair)
84
85def prepared(~S:Data,~K:Data,~V:Data,~C:Type,~R:Type,~E:Data,~runner:W.World<S,C,R,E> -> H.Invocation<V> -> Sys.Outcome<W.World<S,C,R,E>,String,Unit>,~take:W.World<S,C,R,E> -> W.World<S,C,R,E> & M.Slot<S,K,V>,~put:W.World<S,C,R,E> -> M.Slot<S,K,V> -> W.World<S,C,R,E>,~publish:W.World<S,C,R,E> -> M.Transition<V> -> W.World<S,C,R,E>,~same:V -> V -> Bool,~frame:W.World<S,C,R,E> -> W.World<S,C,R,E>,handlers:H.Owners<S,C,R,E,V,runner>,world:W.World<S,C,R,E>,value:H.Prepared<S,K,V>) -> Owners<S,K,V,C,R,E,runner> & Sys.Outcome<W.World<S,C,R,E>,String,Unit>:
86 prepared_with(~S,~K,~V,~C,~R,~E,~runner,~W.World<S,C,R,E>,~H.invoke_phase(~S,~C,~R,~E,~V,~runner),~H.invoke_initial(~S,~C,~R,~E,~V,~runner),~take,~put,~publish,~same,~frame,handlers,world,value)
87
88def captured(~S:Data,~K:Data,~V:Data,~C:Type,~R:Type,~E:Data,~runner:W.World<S,C,R,E> -> H.Invocation<V> -> Sys.Outcome<W.World<S,C,R,E>,String,Unit>,~take:W.World<S,C,R,E> -> W.World<S,C,R,E> & M.Slot<S,K,V>,~put:W.World<S,C,R,E> -> M.Slot<S,K,V> -> W.World<S,C,R,E>,~publish:W.World<S,C,R,E> -> M.Transition<V> -> W.World<S,C,R,E>,~same:V -> V -> Bool,~frame:W.World<S,C,R,E> -> W.World<S,C,R,E>,handlers:H.Owners<S,C,R,E,V,runner>,pair:W.World<S,C,R,E> & M.Slot<S,K,V>) -> Owners<S,K,V,C,R,E,runner> & Sys.Outcome<W.World<S,C,R,E>,String,Unit>:
89 captured_with(~S,~K,~V,~C,~R,~E,~runner,~W.World<S,C,R,E>,~H.invoke_phase(~S,~C,~R,~E,~V,~runner),~H.invoke_initial(~S,~C,~R,~E,~V,~runner),~take,~put,~publish,~same,~frame,handlers,pair)
90
91def apply(~S:Data,~K:Data,~V:Data,~C:Type,~R:Type,~E:Data,~runner:W.World<S,C,R,E> -> H.Invocation<V> -> Sys.Outcome<W.World<S,C,R,E>,String,Unit>,~take:W.World<S,C,R,E> -> W.World<S,C,R,E> & M.Slot<S,K,V>,~put:W.World<S,C,R,E> -> M.Slot<S,K,V> -> W.World<S,C,R,E>,~publish:W.World<S,C,R,E> -> M.Transition<V> -> W.World<S,C,R,E>,~same:V -> V -> Bool,~frame:W.World<S,C,R,E> -> W.World<S,C,R,E>,owners:Owners<S,K,V,C,R,E,runner>,world:W.World<S,C,R,E>) -> Owners<S,K,V,C,R,E,runner> & Sys.Outcome<W.World<S,C,R,E>,String,Unit>:
92 apply_with(~S,~K,~V,~C,~R,~E,~runner,~W.World<S,C,R,E>,~H.invoke_phase(~S,~C,~R,~E,~V,~runner),~H.invoke_initial(~S,~C,~R,~E,~V,~runner),~take,~put,~publish,~same,~frame,owners,world)
93
94def exited(~S:Data,~K:Data,~V:Data,~C:Type,~R:Type,~E:Data,~runner:W.World<S,C,R,E> -> H.Invocation<V> -> Sys.Outcome<W.World<S,C,R,E>,String,Unit>,~take:W.World<S,C,R,E> -> W.World<S,C,R,E> & M.Slot<S,K,V>,~put:W.World<S,C,R,E> -> M.Slot<S,K,V> -> W.World<S,C,R,E>,~publish:W.World<S,C,R,E> -> M.Transition<V> -> W.World<S,C,R,E>,~same:V -> V -> Bool,~frame:W.World<S,C,R,E> -> W.World<S,C,R,E>,transition:List<&1,H.Entry<S,C,R,E,V,runner>>,enter:List<&1,H.Entry<S,C,R,E,V,runner>>,+from:V,+to:V,+skipSame:Bool,result:H.PhaseResult<S,C,R,E,V,runner>) -> Owners<S,K,V,C,R,E,runner> & Sys.Outcome<W.World<S,C,R,E>,String,Unit>:
95 exited_with(~S,~K,~V,~C,~R,~E,~runner,~W.World<S,C,R,E>,~H.invoke_phase(~S,~C,~R,~E,~V,~runner),~H.invoke_initial(~S,~C,~R,~E,~V,~runner),~take,~put,~publish,~same,~frame,transition,enter,from,to,skipSame,engine_result(~S,~C,~R,~E,~V,~runner,result))
96
97def exit(~S:Data,~K:Data,~V:Data,~C:Type,~R:Type,~E:Data,~runner:W.World<S,C,R,E> -> H.Invocation<V> -> Sys.Outcome<W.World<S,C,R,E>,String,Unit>,~take:W.World<S,C,R,E> -> W.World<S,C,R,E> & M.Slot<S,K,V>,~put:W.World<S,C,R,E> -> M.Slot<S,K,V> -> W.World<S,C,R,E>,~publish:W.World<S,C,R,E> -> M.Transition<V> -> W.World<S,C,R,E>,~same:V -> V -> Bool,~frame:W.World<S,C,R,E> -> W.World<S,C,R,E>,owners:Owners<S,K,V,C,R,E,runner>,world:W.World<S,C,R,E>) -> Owners<S,K,V,C,R,E,runner> & Sys.Outcome<W.World<S,C,R,E>,String,Unit>:
98 exit_with(~S,~K,~V,~C,~R,~E,~runner,~W.World<S,C,R,E>,~H.invoke_phase(~S,~C,~R,~E,~V,~runner),~H.invoke_initial(~S,~C,~R,~E,~V,~runner),~take,~put,~publish,~same,~frame,owners,world)
99
100def transitioned(~S:Data,~K:Data,~V:Data,~C:Type,~R:Type,~E:Data,~runner:W.World<S,C,R,E> -> H.Invocation<V> -> Sys.Outcome<W.World<S,C,R,E>,String,Unit>,~take:W.World<S,C,R,E> -> W.World<S,C,R,E> & M.Slot<S,K,V>,~put:W.World<S,C,R,E> -> M.Slot<S,K,V> -> W.World<S,C,R,E>,~publish:W.World<S,C,R,E> -> M.Transition<V> -> W.World<S,C,R,E>,~same:V -> V -> Bool,~frame:W.World<S,C,R,E> -> W.World<S,C,R,E>,exit:List<&1,H.Entry<S,C,R,E,V,runner>>,enter:List<&1,H.Entry<S,C,R,E,V,runner>>,+from:V,+to:V,+skipSame:Bool,result:H.PhaseResult<S,C,R,E,V,runner>) -> Owners<S,K,V,C,R,E,runner> & Sys.Outcome<W.World<S,C,R,E>,String,Unit>:
101 transitioned_with(~S,~K,~V,~C,~R,~E,~runner,~W.World<S,C,R,E>,~H.invoke_phase(~S,~C,~R,~E,~V,~runner),~H.invoke_initial(~S,~C,~R,~E,~V,~runner),~take,~put,~publish,~same,~frame,exit,enter,from,to,skipSame,engine_result(~S,~C,~R,~E,~V,~runner,result))
102
103def transition(~S:Data,~K:Data,~V:Data,~C:Type,~R:Type,~E:Data,~runner:W.World<S,C,R,E> -> H.Invocation<V> -> Sys.Outcome<W.World<S,C,R,E>,String,Unit>,~take:W.World<S,C,R,E> -> W.World<S,C,R,E> & M.Slot<S,K,V>,~put:W.World<S,C,R,E> -> M.Slot<S,K,V> -> W.World<S,C,R,E>,~publish:W.World<S,C,R,E> -> M.Transition<V> -> W.World<S,C,R,E>,~same:V -> V -> Bool,~frame:W.World<S,C,R,E> -> W.World<S,C,R,E>,owners:Owners<S,K,V,C,R,E,runner>,world:W.World<S,C,R,E>) -> Owners<S,K,V,C,R,E,runner> & Sys.Outcome<W.World<S,C,R,E>,String,Unit>:
104 transition_with(~S,~K,~V,~C,~R,~E,~runner,~W.World<S,C,R,E>,~H.invoke_phase(~S,~C,~R,~E,~V,~runner),~H.invoke_initial(~S,~C,~R,~E,~V,~runner),~take,~put,~publish,~same,~frame,owners,world)
105
106def entered(~S:Data,~K:Data,~V:Data,~C:Type,~R:Type,~E:Data,~runner:W.World<S,C,R,E> -> H.Invocation<V> -> Sys.Outcome<W.World<S,C,R,E>,String,Unit>,~take:W.World<S,C,R,E> -> W.World<S,C,R,E> & M.Slot<S,K,V>,~put:W.World<S,C,R,E> -> M.Slot<S,K,V> -> W.World<S,C,R,E>,~publish:W.World<S,C,R,E> -> M.Transition<V> -> W.World<S,C,R,E>,~same:V -> V -> Bool,~frame:W.World<S,C,R,E> -> W.World<S,C,R,E>,exit:List<&1,H.Entry<S,C,R,E,V,runner>>,transition:List<&1,H.Entry<S,C,R,E,V,runner>>,intent:Intent<V>,result:H.PhaseResult<S,C,R,E,V,runner>) -> Owners<S,K,V,C,R,E,runner> & Sys.Outcome<W.World<S,C,R,E>,String,Unit>:
107 entered_with(~S,~K,~V,~C,~R,~E,~runner,~W.World<S,C,R,E>,~H.invoke_phase(~S,~C,~R,~E,~V,~runner),~H.invoke_initial(~S,~C,~R,~E,~V,~runner),~take,~put,~publish,~same,~frame,exit,transition,intent,engine_result(~S,~C,~R,~E,~V,~runner,result))
108
109def enter(~S:Data,~K:Data,~V:Data,~C:Type,~R:Type,~E:Data,~runner:W.World<S,C,R,E> -> H.Invocation<V> -> Sys.Outcome<W.World<S,C,R,E>,String,Unit>,~take:W.World<S,C,R,E> -> W.World<S,C,R,E> & M.Slot<S,K,V>,~put:W.World<S,C,R,E> -> M.Slot<S,K,V> -> W.World<S,C,R,E>,~publish:W.World<S,C,R,E> -> M.Transition<V> -> W.World<S,C,R,E>,~same:V -> V -> Bool,~frame:W.World<S,C,R,E> -> W.World<S,C,R,E>,owners:Owners<S,K,V,C,R,E,runner>,world:W.World<S,C,R,E>) -> Owners<S,K,V,C,R,E,runner> & Sys.Outcome<W.World<S,C,R,E>,String,Unit>:
110 enter_with(~S,~K,~V,~C,~R,~E,~runner,~W.World<S,C,R,E>,~H.invoke_phase(~S,~C,~R,~E,~V,~runner),~H.invoke_initial(~S,~C,~R,~E,~V,~runner),~take,~put,~publish,~same,~frame,owners,world)