1 import Base 2 import ./world.bend as W 3 import ./compose.bend as Q 4 import ./inspector.bend as I 5 import ./inspector_query.bend as IQ 6 import ./ordinary_query_observable.bend as O 7 import ./ordinary_app_observation_data.bend as DTO 8 import ./ordinary_app_resource_declaration.bend as D 9 import ./ordinary_resource_system.bend as P 10 import ./transaction.bend as T 11 def component_observe(~S:Data,~C:Type,~R:Type,~E:Data,~Ops:Type -> Type,~V:Data,~query:O.Declaration,Ops(Q.Frame),I.Frame,V>,~render:V -> String,world:W.World) -> W.World & DTO.Observation>>>: 12 DTO.append_previous(~S,~C,~R,~E,~Unit,~Ops,~V,~query,~render,(world,DTO.Observation{Unit{},[]})) 13 def resource_observed(~S:Data,~C:Type,~R:Type,~E:Data,~V:Data,name:String,render:V -> String,result:W.World & V) -> W.World & DTO.Observation: 14 match result: 15 case (world,+value):(world,DTO.Observation{value,[name ++ "=" ++ render(value)]}) 16 def resource_returned(~S:Data,~C:Type,~R:Type,~E:Data,~Ops:Type -> Type,~V:Data,~declaration:D.Declaration,result:W.World & V) -> W.World & DTO.Observation: 17 resource_observed(~S,~C,~R,~E,~V,D.name(~S,~C,~R,~E,~Ops,~V,declaration),D.presenter(~S,~C,~R,~E,~Ops,~V,declaration),result) 18 def resource_declared(~S:Data,~C:Type,~R:Type,~E:Data,~Ops:Type -> Type,~V:Data,declaration:D.Declaration,world:W.World) -> W.World & DTO.Observation: 19 match declaration: 20 case D.Declaration{ordinary,observe,render}:resource_observed(~S,~C,~R,~E,~V,D.named(~S,P.clause(~S,~R,~T.Tx,E>,~Ops(T.Tx,E>),ordinary)),render,observe(world)) 21 def resource_observe(~S:Data,~C:Type,~R:Type,~E:Data,~Ops:Type -> Type,~V:Data,~declaration:D.Declaration,world:W.World) -> W.World & DTO.Observation: 22 resource_declared(~S,~C,~R,~E,~Ops,~V,declaration,world)