1 import Base 2 import ./change_tick.bend as Tick 3 import ./ordinary_app_records.bend as Leaf 4 import ./ordinary_app_registration_fields.bend as Stored 5 import ./ordinary_app_registration_run.bend as Run 6 import ./ordinary_app_dispatch_result.bend as D 7 import ./world.bend as W 8 import ./system.bend as Sys 9 def returned(~S:Data,~C:Type,~R:Type,~E:Data,~H:Type,~Args:Type,~Error:Data,~Out:Type,~runner:W.World -> Args -> Sys.Outcome,Error,Out>,~RA:Type,~CE:Data,~RE:Data,~RO:Type,put:Leaf.Record>> -> H,convert:Sys.Outcome,Error,Out> -> Sys.Outcome,D.Error,D.Output>,rejected:Args -> D.Arguments,result:Run.TransportResult,Args,Error,Out,Stored.Token>>) -> D.DispatchResult,D.Error,D.Output>: 10 match result: 11 case Run.Completed{token,fields,outcome}:D.Completed{put(Leaf.Record{token,fields}),convert(outcome)} 12 case Run.RegistrationRejected{token,fields,world,args}:D.RegistrationRejected{put(Leaf.Record{token,fields}),world,rejected(args)} 13 def invoke(~S:Data,~C:Type,~R:Type,~E:Data,~H:Type,~Args:Type,~Error:Data,~Out:Type,~runner:W.World -> Args -> Sys.Outcome,Error,Out>,~RA:Type,~CE:Data,~RE:Data,~RO:Type,put:Leaf.Record>> -> H,convert:Sys.Outcome,Error,Out> -> Sys.Outcome,D.Error,D.Output>,rejected:Args -> D.Arguments,record:Leaf.Record>>,world:W.World,args:Args) -> D.DispatchResult,D.Error,D.Output>: 14 match record: 15 case Leaf.Record{token,fields}:returned(~S,~C,~R,~E,~H,~Args,~Error,~Out,~runner,~RA,~CE,~RE,~RO,put,convert,rejected,Run.run(~S,~C,~R,~E,~Args,~Error,~Out,~runner,token,fields,world,args)) 16 def current_cursor(~S:Data,fields:Stored.Fields) -> Maybe<&2,Tick.Tick>: 17 match fields: 18 case Stored.Fields{_,_,_,_,cursor,_,_,_}:cursor 19 def component(~S:Data,~C:Type,~R:Type,~E:Data,~H:Type,~CE:Data,~RA:Type,~RE:Data,~RO:Type,~runner:W.World -> (Unit & Maybe<&2,Tick.Tick>) -> Sys.Outcome,CE,List<&2,Unit>>,put:Leaf.Record,CE,List<&2,Unit>,runner>>> -> H,convert:Sys.Outcome,CE,List<&2,Unit>> -> Sys.Outcome,D.Error,D.Output>,rejected:(Unit & Maybe<&2,Tick.Tick>) -> D.Arguments,record:Leaf.Record,CE,List<&2,Unit>,runner>>>,world:W.World) -> D.DispatchResult,D.Error,D.Output>: 20 match record: 21 case Leaf.Record{token,+fields}:invoke(~S,~C,~R,~E,~H,~(Unit & Maybe<&2,Tick.Tick>),~CE,~List<&2,Unit>,~runner,~RA,~CE,~RE,~RO,put,convert,rejected,Leaf.Record{token,fields},world,(Unit{},current_cursor(~S,fields)))