ordinary_app_capture_query_fields.bend
bendvy-ecs-core@0.1.0.0 · 31 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/compose.bend as Q
4import bendvy-ecs-core@0.1.0.0/transaction.bend as T
5import bendvy-ecs-core@0.1.0.0/local.bend as Local
6import bendvy-ecs-core@0.1.0.0/ordinary_capture_query.bend as O
7import bendvy-ecs-core@0.1.0.0/ordinary_query_declaration.bend as Decl
8import bendvy-ecs-core@0.1.0.0/ordinary_app_composer.bend as Build
9import bendvy-ecs-core@0.1.0.0/ordinary_app_records.bend as Pair
10import bendvy-ecs-core@0.1.0.0/ordinary_app_recipe.bend as Tree
11import bendvy-ecs-core@0.1.0.0/ordinary_app_observation_data.bend as DTO
12import bendvy-ecs-core@0.1.0.0/ordinary_app_registration_fields.bend as Fields
13# Library-derived query bindings retain the real capture owner and reader cursor.
14def fields(~S:Data,~C:Type,~R:Type,~E:Data,~L:Type,~Ops:Type -> Type,~A:Data,~U:Data,~Out:Data,~query:Decl.Declaration<S,Q.Frame<S,C,R,E>,Ops(Q.Frame<S,C,R,E>)>,~body:@-H:Type -> @-caps:Ops(H) -> L -> A -> H -> H & (L & (T.Outcome<U> & Out)),owner:O.Owner<S,C,R,E,L,Ops,A,U,Out,query,body>) -> O.Owner<S,C,R,E,L,Ops,A,U,Out,query,body> & Fields.Fields<S>:
15 match owner:
16 case O.Owner{Local.Instance{+ns,+id,+name,+access,capture},+cursor}:(O.Owner{Local.Instance{ns,id,name,access,capture},cursor},Fields.Fields{ns,id,name,access,cursor,name,Decl.clauses(~S,~Q.Frame<S,C,R,E>,~Ops(Q.Frame<S,C,R,E>),query),Fields.ComponentKind{}})
17def folded(~S:Data,~C:Type,~R:Type,~E:Data,~L:Type,~Ops:Type -> Type,~A:Data,~U:Data,~Out:Data,~query:Decl.Declaration<S,Q.Frame<S,C,R,E>,Ops(Q.Frame<S,C,R,E>)>,~body:@-H:Type -> @-caps:Ops(H) -> L -> A -> H -> H & (L & (T.Outcome<U> & Out)),result:O.Owner<S,C,R,E,L,Ops,A,U,Out,query,body> & Fields.Fields<S>) -> O.Owner<S,C,R,E,L,Ops,A,U,Out,query,body> & List<&2,Fields.Fields<S>>:
18 match result:
19 case (owner,field):(owner,[field])
20def fold(~S:Data,~C:Type,~R:Type,~E:Data,~L:Type,~Ops:Type -> Type,~A:Data,~U:Data,~Out:Data,~query:Decl.Declaration<S,Q.Frame<S,C,R,E>,Ops(Q.Frame<S,C,R,E>)>,~body:@-H:Type -> @-caps:Ops(H) -> L -> A -> H -> H & (L & (T.Outcome<U> & Out)),owner:O.Owner<S,C,R,E,L,Ops,A,U,Out,query,body>) -> O.Owner<S,C,R,E,L,Ops,A,U,Out,query,body> & List<&2,Fields.Fields<S>>:
21 folded(~S,~C,~R,~E,~L,~Ops,~A,~U,~Out,~query,~body,fields(~S,~C,~R,~E,~L,~Ops,~A,~U,~Out,~query,~body,owner))
22type Appended<Before:Type,After:Type,L:Type> is Type:
23 Appended{app:After}
24 AppendRejected{app:Before,capture:L}
25def appended(~S:Data,~C:Type,~R:Type,~E:Data,~L:Type,~Ops:Type -> Type,~A:Data,~U:Data,~Out:Data,~query:Decl.Declaration<S,Q.Frame<S,C,R,E>,Ops(Q.Frame<S,C,R,E>)>,~body:@-H:Type -> @-caps:Ops(H) -> L -> A -> H -> H & (L & (T.Outcome<U> & Out)),~Previous:Type,~Rows:Data,~observe:W.World<S,C,R,E> -> W.World<S,C,R,E> & DTO.Observation<Rows>,~previousFold:Previous -> Previous & List<&2,Fields.Fields<S>>,previous:Previous,recipe:Tree.Recipe<W.World<S,C,R,E>,Rows,observe>,debug:Bool,result:O.Registration<W.World<S,C,R,E>,O.Owner<S,C,R,E,L,Ops,A,U,Out,query,body>,L>) -> Appended<Build.Registered<S,W.World<S,C,R,E>,Previous,Rows,observe,previousFold>,Build.Registered<S,W.World<S,C,R,E>,Previous & O.Owner<S,C,R,E,L,Ops,A,U,Out,query,body>,Rows,observe,Pair.fold_pair(~S,~Previous,~O.Owner<S,C,R,E,L,Ops,A,U,Out,query,body>,~previousFold,~fold(~S,~C,~R,~E,~L,~Ops,~A,~U,~Out,~query,~body))>,L>:
26 match result:
27 case O.Rejected{world,capture}:AppendRejected{Build.Registered{world,previous,recipe,debug},capture}
28 case O.Registered{world,owner}:Appended{Build.Registered{world,(previous,owner),recipe,debug}}
29def register(~S:Data,~C:Type,~R:Type,~E:Data,~L:Type,~Ops:Type -> Type,~A:Data,~U:Data,~Out:Data,~query:Decl.Declaration<S,Q.Frame<S,C,R,E>,Ops(Q.Frame<S,C,R,E>)>,~body:@-H:Type -> @-caps:Ops(H) -> L -> A -> H -> H & (L & (T.Outcome<U> & Out)),~Previous:Type,~Rows:Data,~observe:W.World<S,C,R,E> -> W.World<S,C,R,E> & DTO.Observation<Rows>,~previousFold:Previous -> Previous & List<&2,Fields.Fields<S>>,app:Build.Registered<S,W.World<S,C,R,E>,Previous,Rows,observe,previousFold>,name:String,capture:L) -> Appended<Build.Registered<S,W.World<S,C,R,E>,Previous,Rows,observe,previousFold>,Build.Registered<S,W.World<S,C,R,E>,Previous & O.Owner<S,C,R,E,L,Ops,A,U,Out,query,body>,Rows,observe,Pair.fold_pair(~S,~Previous,~O.Owner<S,C,R,E,L,Ops,A,U,Out,query,body>,~previousFold,~fold(~S,~C,~R,~E,~L,~Ops,~A,~U,~Out,~query,~body))>,L>:
30 match app:
31 case Build.Registered{world,previous,recipe,debug}:appended(~S,~C,~R,~E,~L,~Ops,~A,~U,~Out,~query,~body,~Previous,~Rows,~observe,~previousFold,previous,recipe,debug,O.define(~S,~C,~R,~E,~L,~Ops,~A,~U,~Out,~query,~body,world,name,capture))