1 import Base 2 import ./world.bend as W 3 import ./system.bend as Sys 4 import ./transaction.bend as T 5 import ./machine.bend as M 6 import ./machine_handlers.bend as H 7 import ./machine_handler_bundle.bend as B 8 import ./machine_stream.bend as St 9 import ./ordinary_machine_initialization.bend as Init 10 import ./ordinary_machine_initialization_marker.bend as Marker 11 import ./ordinary_machine_declaration.bend as Machine 12 import ./ordinary_machine_schedule.bend as Ordinary 13 import ./ordinary_app_machine_handler.bend as App 14 import ./ordinary_app_machine_handler_field.bend as Factory 15 import ./ordinary_app_resource_field_declaration.bend as D 16 import ./ordinary_resource_field_system.bend as Field 17 import ./machine_handler_trace.bend as TraceRun 18 import ./execution_trace.bend as Trace 19 type Application -> H.Invocation -> Sys.Outcome,String,Unit>,Extra:Type> is Type: 20 Application{app:App.Application,reader:St.Reader} 21 type Definition -> H.Invocation -> Sys.Outcome,String,Unit>,Extra:Type> is Type: 22 Bound{app:Application} 23 Rejected{app:App.Application} 24 type RunResult -> H.Invocation -> Sys.Outcome,String,Unit>,Extra:Type> is Type: 25 RunResult{result:App.RunResult,reader:St.Reader} 26 def bound(~S:Data,~K:Data,~V:Data,~Q:Data,~C:Type,~R:Type,~E:Data,~runner:W.World -> H.Invocation -> Sys.Outcome,String,Unit>,~Extra:Type,extra:Extra,debug:Bool,result:Marker.Definition) -> Definition: 27 match result: 28 case Marker.Bound{Marker.Application{world,bundle,reader,declaration}}:Bound{Application{App.Application{world,bundle,declaration,extra,debug},reader}} 29 case Marker.BindRejected{world,bundle,declaration}:Rejected{App.Application{world,bundle,declaration,extra,debug}} 30 def bind(~S:Data,~K:Data,~V:Data,~Q:Data,~C:Type,~R:Type,~E:Data,~runner:W.World -> H.Invocation -> Sys.Outcome,String,Unit>,~Extra:Type,~take:R -> R & Init.State,~put:R -> Init.State -> R,~same:V -> V -> Bool,~requirement_same:Q -> Q -> Bool,~has:W.World -> Q -> W.World & Bool,~frame:W.World -> W.World,~initial:Machine.Declaration,app:App.Application) -> Definition: 31 match app: 32 case App.Recovering{result,declaration,extra,debug}:Rejected{App.Recovering{result,declaration,extra,debug}} 33 case App.Application{world,bundle,declaration,extra,debug}:bound(~S,~K,~V,~Q,~C,~R,~E,~runner,~Extra,extra,debug,Marker.bind(~S,~K,~V,~R,~take,~put,~C,~E,~Q,~runner,~same,~requirement_same,~has,~frame,~initial,declaration,bundle,world)) 34 def enabled(~S:Data,~K:Data,~V:Data,~Q:Data,~C:Type,~R:Type,~E:Data,~runner:W.World -> H.Invocation -> Sys.Outcome,String,Unit>,~Extra:Type,app:Application,debug:Bool) -> Application: 35 match app: 36 case Application{app,reader}:Application{App.enabled(~S,~K,~V,~Q,~C,~R,~E,~runner,~Extra,app,debug),reader} 37 def snapshot_returned(~S:Data,~K:Data,~V:Data,~Q:Data,~C:Type,~R:Type,~E:Data,~runner:W.World -> H.Invocation -> Sys.Outcome,String,Unit>,~Extra:Type,reader:St.Reader,pair:App.Application & Maybe<&2,App.Description>) -> Application & Maybe<&2,App.Description>: 38 match pair: 39 case (app,description):(Application{app,reader},description) 40 def snapshot(~S:Data,~K:Data,~V:Data,~Q:Data,~C:Type,~R:Type,~E:Data,~runner:W.World -> H.Invocation -> Sys.Outcome,String,Unit>,~Extra:Type,app:Application) -> Application & Maybe<&2,App.Description>: 41 match app: 42 case Application{app,reader}:snapshot_returned(~S,~K,~V,~Q,~C,~R,~E,~runner,~Extra,reader,App.snapshot(~S,~K,~V,~Q,~C,~R,~E,~runner,~Extra,app)) 43 def captured_returned(~S:Data,~K:Data,~V:Data,~Q:Data,~C:Type,~R:Type,~E:Data,~runner:W.World -> H.Invocation -> Sys.Outcome,String,Unit>,~Extra:Type,reader:St.Reader,pair:App.RunResult & Trace.Batch) -> RunResult & Trace.Batch: 44 match pair: 45 case (result,batch):(RunResult{result,reader},batch) 46 def captured(~S:Data,~K:Data,~V:Data,~Q:Data,~C:Type,~R:Type,~E:Data,~runner:W.World -> H.Invocation -> Sys.Outcome,String,Unit>,~Extra:Type,declaration:Ordinary.Declaration,extra:Extra,debug:Bool,name:String,value:Marker.ObservedMarkerRun) -> RunResult & Trace.Batch: 47 match value: 48 case Marker.ObservedMarkerRun{reader,result}:captured_returned(~S,~K,~V,~Q,~C,~R,~E,~runner,~Extra,reader,Factory.returned(~S,~K,~V,~Q,~C,~R,~E,~runner,~Extra,declaration,extra,debug,TraceRun.captured(~S,~K,~V,~Q,~C,~R,~E,~runner,name,result))) 49 def run(~S:Data,~K:Data,~V:Data,~Q:Data,~C:Type,~R:Type,~E:Data,~Ops:Type -> Type,~Value:Data,~declaration:D.Declaration,~body:@-H:Type -> @-caps:Ops(H) -> H.Invocation -> H -> H & (T.Outcome & Unit),~take:R -> R & Init.State,~put:R -> Init.State -> R,~same:V -> V -> Bool,~requirement_same:Q -> Q -> Bool,~has:W.World -> Q -> W.World & Bool,~frame:W.World -> W.World,~initial:Machine.Declaration,~Extra:Type,app:Application,~String,~Unit,~D.ordinary(~S,~C,~R,~E,~Ops,~Value,declaration),~body),Extra>) -> RunResult,~String,~Unit,~D.ordinary(~S,~C,~R,~E,~Ops,~Value,declaration),~body),Extra> & Trace.Batch: 50 match app: 51 case Application{App.Recovering{result,declaration,extra,debug},reader}:(RunResult{App.RunResult{result,declaration,extra,debug},reader},Trace.Disabled{}) 52 case Application{App.Application{world,bundle,Ordinary.Declaration{+name},extra,+debug},reader}:captured(~S,~K,~V,~Q,~C,~R,~E,~Field.runner(~S,~C,~R,~E,~Ops,~H.Invocation,~String,~Unit,~D.ordinary(~S,~C,~R,~E,~Ops,~Value,declaration),~body),~Extra,Ordinary.Declaration{name},extra,debug,name,Marker.run_observed(~S,~K,~V,~R,~take,~put,~C,~E,~Q,~Field.runner(~S,~C,~R,~E,~Ops,~H.Invocation,~String,~Unit,~D.ordinary(~S,~C,~R,~E,~Ops,~Value,declaration),~body),~Field.runner_observed(~S,~C,~R,~E,~Ops,~H.Invocation,~String,~Unit,~D.ordinary(~S,~C,~R,~E,~Ops,~Value,declaration),~body),~Machine.name(~S,~K,~V,~R,~Init.take_slot(~S,~K,~V,~R,~take,~put),initial),~same,~requirement_same,~has,~frame,Ordinary.Declaration{name},bundle,reader,world,Factory.state(debug))) 53 def resumed(~S:Data,~K:Data,~V:Data,~Q:Data,~C:Type,~R:Type,~E:Data,~runner:W.World -> H.Invocation -> Sys.Outcome,String,Unit>,~Extra:Type,reader:St.Reader,pair:App.Application & B.Status) -> Application & B.Status: 54 match pair: 55 case (app,status):(Application{app,reader},status) 56 def resume(~S:Data,~K:Data,~V:Data,~Q:Data,~C:Type,~R:Type,~E:Data,~runner:W.World -> H.Invocation -> Sys.Outcome,String,Unit>,~Extra:Type,value:RunResult) -> Application & B.Status: 57 match value: 58 case RunResult{result,reader}:resumed(~S,~K,~V,~Q,~C,~R,~E,~runner,~Extra,reader,Factory.resume(~S,~K,~V,~Q,~C,~R,~E,~runner,~Extra,result))