execution_builder.bend

bendvy-ecs-core@0.1.0.3 · 299 lines · 112 definitions

1import Base
2import bendvy-ecs-core@0.1.0.3/execution_effects.bend as E
3import bendvy-ecs-core@0.1.0.3/execution_state_effect.bend as StateEffect
4import bendvy-ecs-core@0.1.0.3/world.bend as W
5import bendvy-ecs-core@0.1.0.3/execution_relation_failure_provider.bend as FailureProvider
6import bendvy-ecs-core@0.1.0.3/execution_relation_failure_access.bend as FailureAccess
7import bendvy-ecs-core@0.1.0.3/execution_relation_store.bend as RelationStore
8import bendvy-ecs-core@0.1.0.3/execution_resource_policy.bend as Policy
9import bendvy-ecs-core@0.1.0.3/relation_types.bend as T
10import bendvy-ecs-core@0.1.0.3/execution_reservation_authority.bend as Effect
11import bendvy-ecs-core@0.1.0.3/execution_lifecycle_access.bend as Life
12import bendvy-ecs-core@0.1.0.3/execution_lifecycle_notices.bend as Notice
13import bendvy-ecs-core@0.1.0.3/execution_state.bend as State
14import bendvy-ecs-core@0.1.0.3/execution_composer_layout.bend as Layout
15import bendvy-ecs-core@0.1.0.3/execution_layout_access.bend as LayoutAccess
16import bendvy-ecs-core@0.1.0.3/execution_declaration.bend as D
17import bendvy-ecs-core@0.1.0.3/execution_access.bend as A
18import bendvy-ecs-core@0.1.0.3/execution_query.bend as Q
19import bendvy-ecs-core@0.1.0.3/execution_query_recipe.bend as Recipe
20import bendvy-ecs-core@0.1.0.3/execution_query_matches.bend as Match
21import bendvy-ecs-core@0.1.0.3/execution_resource_recipe.bend as Resources
22import bendvy-ecs-core@0.1.0.3/execution_resource_access.bend as ResourceAccess
23
24type Book is Type:
25  Book{access:List<&2,D.Access>,queryRecipes:List<&2,Recipe.Entry>,resourceRecipes:List<&2,Resources.Entry>,supported:Bool}
26def ComponentRead(~S:Data,~C:Type,~R:Type,~H:Type,~B:Type) -> Type:
27  @-layout:Layout.Layout -> @-route:Layout.Route -> @-same:{C == Layout.columns(~S,layout) : Type} -> @-valid:{Layout.grant_valid(~layout,~route) == True{} : Bool} -> B -> B & A.ComponentRead<S,H,Layout.view(layout,route)>
28
29def ComponentWrite(~S:Data,~C:Type,~R:Type,~H:Type,~B:Type) -> Type:
30  @-layout:Layout.Layout -> @-route:Layout.Route -> @-same:{C == Layout.columns(~S,layout) : Type} -> @-valid:{Layout.grant_valid(~layout,~route) == True{} : Bool} -> B -> B & A.ComponentWrite<S,H,Layout.payload(layout,route),Layout.view(layout,route)>
31
32def BasicResourceRead(~S:Data,~C:Type,~R:Type,~H:Type,~B:Type) -> Type:
33  @layout:Layout.Layout -> @+route:Layout.Route -> @same:{R == Layout.resources(~S,layout) : Type} -> @valid:{Bool.and(Layout.unique(layout),Layout.valid(layout,route)) == True{} : Bool} -> B -> B & A.ResourceRead<H,Layout.view(layout,route)>
34
35def BasicResourceWrite(~S:Data,~C:Type,~R:Type,~H:Type,~B:Type) -> Type:
36  @-layout:Layout.Layout -> @-route:Layout.Route -> @-same:{R == Layout.resources(~S,layout) : Type} -> @-valid:{Layout.resource_write_valid(~layout,~route) == True{} : Bool} -> B -> B & A.ResourceWrite<H,Layout.payload(layout,route),Layout.view(layout,route)>
37
38def GeneralResourceRead(~S:Data,~C:Type,~R:Type,~H:Type,~B:Type) -> Type:
39  @-full:Layout.Layout -> @-route:Layout.Route -> @-valid:{Layout.grant_valid(~full,~route) == True{} : Bool} -> @-local:{R == Layout.resources(~S,full) : Type} -> B -> B & ResourceAccess.Reader<H,Layout.view(full,route)>
40def FailureRead(~S:Data,~C:Type,~R:Type,~H:Type,~B:Type) -> Type:
41  @-full:Layout.Layout -> @-route:Layout.Route -> @-valid:{Layout.grant_valid(~full,~route) == True{} : Bool} -> @-descriptor:T.Descriptor<S> -> @-payload:{Layout.payload(full,route) == RelationStore.Store<S,descriptor> : Type} -> @-view:{Layout.view(full,route) == RelationStore.View<S,descriptor> : Data} -> @-protected:{Layout.policy(full,route) == Policy.ProtectedRelation{S,descriptor} : Policy.Policy} -> @-local:Layout.Layout -> @-selected:Layout.Route -> @-same:{R == Layout.resources(~S,local) : Type} -> @-localvalid:{Layout.grant_valid(~local,~selected) == True{} : Bool} -> @-slot:{LayoutAccess.resource_slot(~S,local,selected) == FailureProvider.Slot(~S,~full,~route,~descriptor) : Type} -> B -> B & FailureAccess.Read<S,descriptor,full,route,H>
42def GeneralFailureRead(~S:Data,~C:Type,~R:Type,~H:Type,~B:Type) -> Type:
43  @-full:Layout.Layout -> @-route:Layout.Route -> @-valid:{Layout.grant_valid(~full,~route) == True{} : Bool} -> @-descriptor:T.Descriptor<S> -> @-payload:{Layout.payload(full,route) == RelationStore.Store<S,descriptor> : Type} -> @-view:{Layout.view(full,route) == RelationStore.View<S,descriptor> : Data} -> @-protected:{Layout.policy(full,route) == Policy.ProtectedRelation{S,descriptor} : Policy.Policy} -> @-local:{R == Layout.resources(~S,full) : Type} -> B -> B & FailureAccess.Read<S,descriptor,full,route,H>
44def ResourceReadSelection(~S:Data,~C:Type,~R:Type,~H:Type,~B:Type,~Ops:Type -> Type) -> Type:
45  @-basic:BasicResourceRead(~S,~C,~R,~H,~B) -> @-general:GeneralResourceRead(~S,~C,~R,~H,~B) -> @-failure:FailureRead(~S,~C,~R,~H,~B) -> @-general_failure:GeneralFailureRead(~S,~C,~R,~H,~B) -> B -> B & Ops(H)
46def ResourceRead(~S:Data,~C:Type,~R:Type,~H:Type,~B:Type) -> Type:
47  @-Ops:(Type -> Type) -> @-selection:ResourceReadSelection(~S,~C,~R,~H,~B,~Ops) -> B -> B & Ops(H)
48def basic_resource_read_selection(~S:Data,~C:Type,~R:Type,~H:Type,~B:Type,~layout:Layout.Layout,~route:Layout.Route,~same:{R == Layout.resources(~S,layout) : Type},~valid:{Layout.grant_valid(~layout,~route) == True{} : Bool},~basic:BasicResourceRead(~S,~C,~R,~H,~B),~general:GeneralResourceRead(~S,~C,~R,~H,~B),~failure:FailureRead(~S,~C,~R,~H,~B),~general_failure:GeneralFailureRead(~S,~C,~R,~H,~B),book:B) -> B & A.ResourceRead<H,Layout.view(layout,route)>:
49  basic(layout,route,same,valid,book)
50def basic_resource_read(~S:Data,~C:Type,~R:Type,~H:Type,~B:Type,~layout:Layout.Layout,~route:Layout.Route,~same:{R == Layout.resources(~S,layout) : Type},~valid:{Layout.grant_valid(~layout,~route) == True{} : Bool},~resource:ResourceRead(~S,~C,~R,~H,~B),book:B) -> B & A.ResourceRead<H,Layout.view(layout,route)>:
51  resource(A.ResourceReads(~Layout.view(layout,route)),basic => general => failure => general_failure => selected => basic(layout,route,same,valid,selected),book)
52def GeneralResourceWrite(~S:Data,~C:Type,~R:Type,~H:Type,~B:Type) -> Type:
53  @-full:Layout.Layout -> @-route:Layout.Route -> @-valid:{Layout.resource_write_valid(~full,~route) == True{} : Bool} -> @-local:{R == Layout.resources(~S,full) : Type} -> B -> B & ResourceAccess.Writer<H,Layout.payload(full,route),Layout.view(full,route)>
54def ResourceWriteSelection(~S:Data,~C:Type,~R:Type,~H:Type,~B:Type,~Ops:Type -> Type) -> Type:
55  @-basic:BasicResourceWrite(~S,~C,~R,~H,~B) -> @-general:GeneralResourceWrite(~S,~C,~R,~H,~B) -> B -> B & Ops(H)
56def ResourceWrite(~S:Data,~C:Type,~R:Type,~H:Type,~B:Type) -> Type:
57  @-Ops:(Type -> Type) -> @-selection:ResourceWriteSelection(~S,~C,~R,~H,~B,~Ops) -> B -> B & Ops(H)
58def basic_resource_write_selection(~S:Data,~C:Type,~R:Type,~H:Type,~B:Type,~layout:Layout.Layout,~route:Layout.Route,~same:{R == Layout.resources(~S,layout) : Type},~valid:{Layout.resource_write_valid(~layout,~route) == True{} : Bool},~basic:BasicResourceWrite(~S,~C,~R,~H,~B),~general:GeneralResourceWrite(~S,~C,~R,~H,~B),book:B) -> B & A.ResourceWrite<H,Layout.payload(layout,route),Layout.view(layout,route)>:
59  basic(layout,route,same,valid,book)
60def basic_resource_write(~S:Data,~C:Type,~R:Type,~H:Type,~B:Type,~layout:Layout.Layout,~route:Layout.Route,~same:{R == Layout.resources(~S,layout) : Type},~valid:{Layout.resource_write_valid(~layout,~route) == True{} : Bool},~resource:ResourceWrite(~S,~C,~R,~H,~B),book:B) -> B & A.ResourceWrite<H,Layout.payload(layout,route),Layout.view(layout,route)>:
61  resource(A.ResourceWrites(~Layout.payload(layout,route),~Layout.view(layout,route)),basic_resource_write_selection(~S,~C,~R,~H,~B,~layout,~route,~same,~valid),book)
62
63def BasicQuery(~S:Data,~C:Type,~R:Type,~H:Type,~B:Type) -> Type:
64  @-layout:Layout.Layout -> @-route:Layout.Route -> @-same:{C == Layout.columns(~S,layout) : Type} -> @-shape:{Layout.columns(~S,Layout.subtree(layout,route)) == Layout.query_pair(~S,~layout,~route) : Type} -> @-valid:{Layout.query_valid(~layout,~route) == True{} : Bool} -> @-Error:Data -> @-body:(U32 -> Layout.query_view(layout,route) -> Layout.query_output(layout,route) -> Layout.query_output(layout,route) & Maybe<&2,Error>) -> Q.Mode -> B -> B & Q.Each<S,H,Error>
65
66def PureOutputQuery(~S:Data,~C:Type,~R:Type,~H:Type,~B:Type) -> Type:
67  @-layout:Layout.Layout -> @-route:Layout.Route -> @-same:{C == Layout.columns(~S,layout) : Type} -> @-shape:{Layout.columns(~S,Layout.subtree(layout,route)) == Layout.query_pair(~S,~layout,~route) : Type} -> @-valid:{Layout.query_valid(~layout,~route) == True{} : Bool} -> @-O:Type -> @-Error:Data -> @-body:Q.OutputBody(~S,~layout,~route,~O,~Error) -> Q.Mode -> B -> B & Q.OutputEach<S,H,O,Error>
68def SequentialOutputQuery(~S:Data,~C:Type,~R:Type,~F:Type -> Type,~H:Type,~B:Type) -> Type:
69  @-Permit:Data -> @-layout:Layout.Layout -> @-route:Layout.Route -> @-same:{C == Layout.columns(~S,layout) : Type} -> @-shape:{Layout.columns(~S,Layout.subtree(layout,route)) == Layout.query_pair(~S,~layout,~route) : Type} -> @-valid:{Layout.query_valid(~layout,~route) == True{} : Bool} -> @-O:Type -> @-Error:Data -> @-body:Q.SequentialOutputBody(~S,~Permit,~F,~layout,~route,~O,~Error) -> Q.Mode -> B -> B & Q.SequentialOutputEach<S,Permit,F,H,O,Error>
70def OutputQuery(~S:Data,~C:Type,~R:Type,~H:Type,~B:Type) -> Type:
71  PureOutputQuery(~S,~C,~R,~H,~B)
72def GeneralQuery(~S:Data,~WC:Type,~C:Type,~R:Type,~H:Type,~B:Type) -> Type:
73  @-full:Layout.Layout -> @-route:Layout.Route -> @-same:{WC == Layout.columns(~S,full) : Type} -> @-valid:{Layout.grant_valid(~full,~route) == True{} : Bool} -> @-local:{C == Layout.columns(~S,full) : Type} -> @-kind:Recipe.QueryKind -> @-bound:Recipe.Bound -> @-presence:Match.Presence -> @-predicate:(Maybe<&2,Layout.view(full,route)> -> Bool) -> B -> B & Q.GeneralOps(~S,~Layout.payload(full,route),~Layout.view(full,route),kind,H)
74def GeneralOutputQuery(~S:Data,~WC:Type,~C:Type,~R:Type,~H:Type,~B:Type) -> Type:
75  @-full:Layout.Layout -> @-route:Layout.Route -> @-same:{WC == Layout.columns(~S,full) : Type} -> @-valid:{Layout.grant_valid(~full,~route) == True{} : Bool} -> @-local:{C == Layout.columns(~S,full) : Type} -> @-bound:Recipe.Bound -> @-presence:Match.Presence -> @-predicate:(Maybe<&2,Layout.view(full,route)> -> Bool) -> @-O:Type -> @-E:Data -> @-body:(W.Handle<S> -> Layout.view(full,route) -> Layout.payload(full,route) -> O -> Layout.payload(full,route) & (O & Maybe<&2,E>)) -> B -> B & Q.GeneralOutputWriter<S,H,Layout.payload(full,route),Layout.view(full,route),O,E>
76def SequentialGeneralQuery(~S:Data,~WC:Type,~C:Type,~R:Type,~F:Type -> Type,~H:Type,~B:Type) -> Type:
77  @-Permit:Data -> @-full:Layout.Layout -> @-route:Layout.Route -> @-same:{WC == Layout.columns(~S,full) : Type} -> @-valid:{Layout.grant_valid(~full,~route) == True{} : Bool} -> @-local:{C == Layout.columns(~S,full) : Type} -> @-bound:Recipe.Bound -> @-presence:Match.Presence -> @-predicate:(Maybe<&2,Layout.view(full,route)> -> Bool) -> @-O:Type -> @-Error:Data -> @-body:Q.SequentialGeneralBody(~S,~Permit,~F,~Layout.payload(full,route),~Layout.view(full,route),~O,~Error) -> Q.Mode -> B -> B & Q.SequentialOutputEach<S,Permit,F,H,O,Error>
78
79def QuerySelection(~S:Data,~WC:Type,~C:Type,~R:Type,~F:Type -> Type,~H:Type,~B:Type,~Ops:Type -> Type) -> Type:
80  @-basic:BasicQuery(~S,~C,~R,~H,~B) -> @-output:OutputQuery(~S,~C,~R,~H,~B) -> @-sequentialOutput:SequentialOutputQuery(~S,~C,~R,~F,~H,~B) -> @-general:GeneralQuery(~S,~WC,~C,~R,~H,~B) -> @-generalOutput:GeneralOutputQuery(~S,~WC,~C,~R,~H,~B) -> @-sequentialGeneral:SequentialGeneralQuery(~S,~WC,~C,~R,~F,~H,~B) -> B -> B & Ops(H)
81def Query(~S:Data,~WC:Type,~C:Type,~R:Type,~F:Type -> Type,~H:Type,~B:Type) -> Type:
82  @-Ops:(Type -> Type) -> @-selection:QuerySelection(~S,~WC,~C,~R,~F,~H,~B,~Ops) -> B -> B & Ops(H)
83
84def basic_query_selection(~S:Data,~WC:Type,~C:Type,~R:Type,~F:Type -> Type,~layout:Layout.Layout,~route:Layout.Route,~same:{C == Layout.columns(~S,layout) : Type},~shape:{Layout.columns(~S,Layout.subtree(layout,route)) == Layout.query_pair(~S,~layout,~route) : Type},~valid:{Layout.query_valid(~layout,~route) == True{} : Bool},~Error:Data,~body:U32 -> Layout.query_view(layout,route) -> Layout.query_output(layout,route) -> Layout.query_output(layout,route) & Maybe<&2,Error>,~mode:Q.Mode,~H:Type,~B:Type,~basic:BasicQuery(~S,~C,~R,~H,~B),~output:OutputQuery(~S,~C,~R,~H,~B),~sequentialOutput:SequentialOutputQuery(~S,~C,~R,~F,~H,~B),~general:GeneralQuery(~S,~WC,~C,~R,~H,~B),~generalOutput:GeneralOutputQuery(~S,~WC,~C,~R,~H,~B),~sequentialGeneral:SequentialGeneralQuery(~S,~WC,~C,~R,~F,~H,~B),book:B) -> B & Q.Each<S,H,Error>:
85  basic(layout,route,same,shape,valid,Error,body,mode,book)
86def basic_query(~S:Data,~WC:Type,~C:Type,~R:Type,~F:Type -> Type,~layout:Layout.Layout,~route:Layout.Route,~same:{C == Layout.columns(~S,layout) : Type},~shape:{Layout.columns(~S,Layout.subtree(layout,route)) == Layout.query_pair(~S,~layout,~route) : Type},~valid:{Layout.query_valid(~layout,~route) == True{} : Bool},~Error:Data,~body:U32 -> Layout.query_view(layout,route) -> Layout.query_output(layout,route) -> Layout.query_output(layout,route) & Maybe<&2,Error>,~mode:Q.Mode,~H:Type,~B:Type,~query:Query(~S,~WC,~C,~R,~F,~H,~B),book:B) -> B & Q.Each<S,H,Error>:
87  query(Q.Ops(~S,~Error),basic_query_selection(~S,~WC,~C,~R,~F,~layout,~route,~same,~shape,~valid,~Error,~body,~mode,~H,~B),book)
88def output_query_selection(~S:Data,~WC:Type,~C:Type,~R:Type,~F:Type -> Type,~layout:Layout.Layout,~route:Layout.Route,~same:{C == Layout.columns(~S,layout) : Type},~shape:{Layout.columns(~S,Layout.subtree(layout,route)) == Layout.query_pair(~S,~layout,~route) : Type},~valid:{Layout.query_valid(~layout,~route) == True{} : Bool},~O:Type,~Error:Data,~body:Q.OutputBody(~S,~layout,~route,~O,~Error),~mode:Q.Mode,~H:Type,~B:Type,~basic:BasicQuery(~S,~C,~R,~H,~B),~output:OutputQuery(~S,~C,~R,~H,~B),~sequentialOutput:SequentialOutputQuery(~S,~C,~R,~F,~H,~B),~general:GeneralQuery(~S,~WC,~C,~R,~H,~B),~generalOutput:GeneralOutputQuery(~S,~WC,~C,~R,~H,~B),~sequentialGeneral:SequentialGeneralQuery(~S,~WC,~C,~R,~F,~H,~B),book:B) -> B & Q.OutputEach<S,H,O,Error>:
89  output(layout,route,same,shape,valid,O,Error,body,mode,book)
90def output_query(~S:Data,~WC:Type,~C:Type,~R:Type,~F:Type -> Type,~layout:Layout.Layout,~route:Layout.Route,~same:{C == Layout.columns(~S,layout) : Type},~shape:{Layout.columns(~S,Layout.subtree(layout,route)) == Layout.query_pair(~S,~layout,~route) : Type},~valid:{Layout.query_valid(~layout,~route) == True{} : Bool},~O:Type,~Error:Data,~body:Q.OutputBody(~S,~layout,~route,~O,~Error),~mode:Q.Mode,~H:Type,~B:Type,~query:Query(~S,~WC,~C,~R,~F,~H,~B),book:B) -> B & Q.OutputEach<S,H,O,Error>:
91  query(Q.OutputOps(~S,~O,~Error),output_query_selection(~S,~WC,~C,~R,~F,~layout,~route,~same,~shape,~valid,~O,~Error,~body,~mode,~H,~B),book)
92
93def RemovedLifecycle(~S:Data,~WC:Type,~C:Type,~R:Type,~H:Type,~B:Type) -> Type:
94  @-layout:Layout.Layout -> @-route:Layout.Route -> @-same:{WC == Layout.columns(~S,layout) : Type} -> @-valid:{Layout.grant_valid(~layout,~route) == True{} : Bool} -> B -> B & Life.Next<S,H,Layout.origin(layout,route),Notice.Removed{Layout.key(layout,route)}>
95def DespawnLifecycle(~S:Data,~WC:Type,~C:Type,~R:Type,~H:Type,~B:Type) -> Type:
96  B -> B & Life.Next<S,H,Layout.EmptyLayout{},Notice.Despawned{}>
97def LifecycleSelection(~S:Data,~WC:Type,~C:Type,~R:Type,~H:Type,~B:Type,~Ops:Type -> Type) -> Type:
98  @-removed:RemovedLifecycle(~S,~WC,~C,~R,~H,~B) -> @-despawned:DespawnLifecycle(~S,~WC,~C,~R,~H,~B) -> B -> B & Ops(H)
99def Lifecycle(~S:Data,~WC:Type,~C:Type,~R:Type,~H:Type,~B:Type) -> Type:
100  @-Ops:(Type -> Type) -> @-selection:LifecycleSelection(~S,~WC,~C,~R,~H,~B,~Ops) -> B -> B & Ops(H)
101def removed_lifecycle_selection(~S:Data,~WC:Type,~C:Type,~R:Type,~layout:Layout.Layout,~route:Layout.Route,~same:{WC == Layout.columns(~S,layout) : Type},~valid:{Layout.grant_valid(~layout,~route) == True{} : Bool},~H:Type,~B:Type,~removed:RemovedLifecycle(~S,~WC,~C,~R,~H,~B),~despawned:DespawnLifecycle(~S,~WC,~C,~R,~H,~B),book:B) -> B & Life.Next<S,H,Layout.origin(layout,route),Notice.Removed{Layout.key(layout,route)}>:
102  removed(layout,route,same,valid,book)
103def removed_lifecycle(~S:Data,~WC:Type,~C:Type,~R:Type,~layout:Layout.Layout,~route:Layout.Route,~same:{WC == Layout.columns(~S,layout) : Type},~valid:{Layout.grant_valid(~layout,~route) == True{} : Bool},~H:Type,~B:Type,~lifecycle:Lifecycle(~S,~WC,~C,~R,~H,~B),book:B) -> B & Life.Next<S,H,Layout.origin(layout,route),Notice.Removed{Layout.key(layout,route)}>:
104  lifecycle(Life.Ops(~S,~(Layout.origin(layout,route)),~(Notice.Removed{Layout.key(layout,route)})),removed_lifecycle_selection(~S,~WC,~C,~R,~layout,~route,~same,~valid,~H,~B),book)
105def despawn_lifecycle_selection(~S:Data,~WC:Type,~C:Type,~R:Type,~H:Type,~B:Type,~removed:RemovedLifecycle(~S,~WC,~C,~R,~H,~B),~despawned:DespawnLifecycle(~S,~WC,~C,~R,~H,~B),book:B) -> B & Life.Next<S,H,Layout.EmptyLayout{},Notice.Despawned{}>:
106  despawned(book)
107def despawn_lifecycle(~S:Data,~WC:Type,~C:Type,~R:Type,~H:Type,~B:Type,~lifecycle:Lifecycle(~S,~WC,~C,~R,~H,~B),book:B) -> B & Life.Next<S,H,Layout.EmptyLayout{},Notice.Despawned{}>:
108  lifecycle(Life.Ops(~S,~(Layout.EmptyLayout{}),~(Notice.Despawned{})),despawn_lifecycle_selection(~S,~WC,~C,~R,~H,~B),book)
109
110def Selection(~S:Data,~WC:Type,~C:Type,~R:Type,~Permit:Data,~F:Type -> Type,~H:Type,~B:Type,~Ops:Data -> (Type -> Type) -> Type -> Type) -> Type:
111  @-component_read:ComponentRead(~S,~C,~R,~H,~B) -> @-component_write:ComponentWrite(~S,~C,~R,~H,~B) -> @-resource_read:ResourceRead(~S,~C,~R,~H,~B) -> @-resource_write:ResourceWrite(~S,~C,~R,~H,~B) -> @-query:Query(~S,~WC,~C,~R,~F,~H,~B) -> @-lifecycle:Lifecycle(~S,~WC,~C,~R,~H,~B) -> B -> B & Ops(Permit,F,H)
112def Builder(~S:Data,~WC:Type,~C:Type,~R:Type,~Permit:Data,~F:Type -> Type,~H:Type,~B:Type) -> Type:
113  @-Ops:(Data -> (Type -> Type) -> Type -> Type) -> @-selection:Selection(~S,~WC,~C,~R,~Permit,~F,~H,~B,~Ops) -> B -> B & Ops(Permit,F,H)
114def Program(~S:Data,~WC:Type,~C:Type,~R:Type,~Ops:Data -> (Type -> Type) -> Type -> Type) -> Type:
115  @-Permit:Data -> @-F:(Type -> Type) -> @-effects:E.Effects<F> -> @-H:Type -> @-B:Type -> @-builder:Builder(~S,~WC,~C,~R,~Permit,~F,~H,~B) -> B -> B & Ops(Permit,F,H)
116# Trusted compiler kernel. Ordinary application Programs never receive token.
117def FrameworkProgram(~S:Data,~WC:Type,~C:Type,~R:Type,~Ops:Data -> (Type -> Type) -> Type -> Type) -> Type:
118  @-Permit:Data -> @-token:Permit -> @-F:(Type -> Type) -> @-effects:E.Effects<F> -> @-request:(Permit -> F(W.Reservation<S>)) -> @-H:Type -> @-B:Type -> @-builder:Builder(~S,~WC,~C,~R,~Permit,~F,~H,~B) -> B -> B & Ops(Permit,F,H)
119def framework_program(~S:Data,~WC:Type,~C:Type,~R:Type,~Ops:Data -> (Type -> Type) -> Type -> Type,~ordinary:Program(~S,~WC,~C,~R,~Ops),~Permit:Data,~token:Permit,~F:Type -> Type,~effects:E.Effects<F>,~request:Permit -> F(W.Reservation<S>),~H:Type,~B:Type,~builder:Builder(~S,~WC,~C,~R,~Permit,~F,~H,~B),book:B) -> B & Ops(Permit,F,H):
120  ordinary(Permit,F,effects,H,B,builder,book)
121
122def accumulate(-S:Data,-C:Type,-R:Type,-Ops:Type -> Type,book:Book,value:D.Declaration<S,C,R,Ops>) -> Book & Ops(State.Scope<S,C,R>):
123  match book value:
124    case Book{previous,queries,resources,supported} D.Declaration{caps,access}:(Book{List.append(&2,D.Access,previous,access),queries,resources,supported},caps)
125def component_read_build(~S:Data,~C:Type,~R:Type,~layout:Layout.Layout,~route:Layout.Route,~same:{C == Layout.columns(~S,layout) : Type},~valid:{Layout.grant_valid(~layout,~route) == True{} : Bool},book:Book) -> Book & A.ComponentRead<S,State.Scope<S,C,R>,Layout.view(layout,route)>:
126  accumulate(S,C,R,A.ComponentReads(~S,~Layout.view(layout,route)),book,LayoutAccess.component_read(~S,~C,~R,~layout,~route,~same,~valid))
127
128def component_write_build(~S:Data,~C:Type,~R:Type,~layout:Layout.Layout,~route:Layout.Route,~same:{C == Layout.columns(~S,layout) : Type},~valid:{Layout.grant_valid(~layout,~route) == True{} : Bool},book:Book) -> Book & A.ComponentWrite<S,State.Scope<S,C,R>,Layout.payload(layout,route),Layout.view(layout,route)>:
129  accumulate(S,C,R,A.ComponentWrites(~S,~Layout.payload(layout,route),~Layout.view(layout,route)),book,LayoutAccess.component_write(~S,~C,~R,~layout,~route,~same,~valid))
130
131def record_resource(book:Book,entry:Resources.Entry) -> Book:
132  match book:
133    case Book{access,queries,resources,supported}:Book{access,queries,entry <> resources,supported}
134def resource_book(book:Book,entry:Resources.Entry,access:D.Access,available:Bool) -> Book:
135  match book:
136    case Book{previous,queries,resources,supported}:Book{access <> previous,queries,entry <> resources,Bool.and(supported,available)}
137def resource_read_recorded(-S:Data,-C:Type,-R:Type,-layout:Layout.Layout,+route:Layout.Route,book:Book,result:String & A.ResourceRead<State.Scope<S,C,R>,Layout.view(layout,route)>) -> Book & A.ResourceRead<State.Scope<S,C,R>,Layout.view(layout,route)>:
138  match result:
139    case (+key,cap):(resource_book(book,Resources.Entry{route,key,Resources.ReadOnly{}},D.Access{key,D.ResourceAccess{},D.Exclusive{},D.ReadOnly{}},True{}),cap)
140def resource_read_build(-S:Data,-C:Type,-R:Type,layout:Layout.Layout,+route:Layout.Route,same:{R == Layout.resources_generic(S,layout) : Type},valid:{Bool.and(Layout.unique(layout),Layout.valid(layout,route)) == True{} : Bool},book:Book) -> Book & A.ResourceRead<State.Scope<S,C,R>,Layout.view(layout,route)>:
141  resource_read_recorded(S,C,R,layout,route,book,LayoutAccess.resource_read(S,C,R,layout,route,same,valid))
142
143def resource_write_build(~S:Data,~C:Type,~R:Type,~layout:Layout.Layout,~route:Layout.Route,~same:{R == Layout.resources(~S,layout) : Type},~valid:{Layout.resource_write_valid(~layout,~route) == True{} : Bool},book:Book) -> Book & A.ResourceWrite<State.Scope<S,C,R>,Layout.payload(layout,route),Layout.view(layout,route)>:
144  accumulate(S,C,R,A.ResourceWrites(~Layout.payload(layout,route),~Layout.view(layout,route)),record_resource(book,Resources.Entry{route,Layout.key(layout,route),Resources.Writable{}}),LayoutAccess.resource_write(~S,~C,~R,~layout,~route,~same,~valid))
145
146def resource_read_unsupported(~S:Data,~C:Type,~R:Type,~full:Layout.Layout,~route:Layout.Route,~valid:{Layout.grant_valid(~full,~route) == True{} : Bool},~local:{R == Layout.resources(~S,full) : Type},book:Book) -> Book & ResourceAccess.Reader<State.Scope<S,C,R>,Layout.view(full,route)>:
147  (resource_book(book,Resources.Entry{route,Layout.key(full,route),Resources.ReadOnly{}},D.Access{Layout.key(full,route),D.ResourceAccess{},D.SharedView{},D.ReadOnly{}},False{}),ResourceAccess.UnsupportedReader{})
148def failure_read_build(~S:Data,~C:Type,~R:Type,~full:Layout.Layout,~route:Layout.Route,~valid:{Layout.grant_valid(~full,~route) == True{} : Bool},~descriptor:T.Descriptor<S>,~payload:{Layout.payload(full,route) == RelationStore.Store<S,descriptor> : Type},~view:{Layout.view(full,route) == RelationStore.View<S,descriptor> : Data},~protected:{Layout.policy(full,route) == Policy.ProtectedRelation{S,descriptor} : Policy.Policy},~local:Layout.Layout,~selected:Layout.Route,~same:{R == Layout.resources(~S,local) : Type},~localvalid:{Layout.grant_valid(~local,~selected) == True{} : Bool},~slot:{LayoutAccess.resource_slot(~S,local,selected) == FailureProvider.Slot(~S,~full,~route,~descriptor) : Type},book:Book) -> Book & FailureAccess.Read<S,descriptor,full,route,State.Scope<S,C,R>>:
149  accumulate(S,C,R,FailureAccess.Ops(~S,~descriptor,~full,~route),book,D.Declaration{FailureProvider.whole(~S,~C,~R,~full,~route,~valid,~descriptor,~payload,~view,~protected,~local,~selected,~same,~localvalid,~slot),[D.Access{Layout.key(full,route),D.ResourceAccess{},D.SharedView{},D.ReadOnly{}}]})
150def general_failure_read_build(~S:Data,~C:Type,~R:Type,~full:Layout.Layout,~route:Layout.Route,~valid:{Layout.grant_valid(~full,~route) == True{} : Bool},~descriptor:T.Descriptor<S>,~payload:{Layout.payload(full,route) == RelationStore.Store<S,descriptor> : Type},~view:{Layout.view(full,route) == RelationStore.View<S,descriptor> : Data},~protected:{Layout.policy(full,route) == Policy.ProtectedRelation{S,descriptor} : Policy.Policy},~local:{R == Layout.resources(~S,full) : Type},book:Book) -> Book & FailureAccess.Read<S,descriptor,full,route,State.Scope<S,C,R>>:
151  (resource_book(book,Resources.Entry{route,Layout.key(full,route),Resources.ReadOnly{}},D.Access{Layout.key(full,route),D.ResourceAccess{},D.SharedView{},D.ReadOnly{}},True{}),FailureProvider.general(~S,~C,~R,~full,~route,~valid,~descriptor,~payload,~view,~protected,~local))
152def resource_read_provision(~S:Data,~C:Type,~R:Type,~Ops:Type -> Type,~selection:ResourceReadSelection(~S,~C,~R,~State.Scope<S,C,R>,~Book,~Ops),book:Book) -> Book & Ops(State.Scope<S,C,R>):
153  selection(resource_read_build(S,C,R),resource_read_unsupported(~S,~C,~R),failure_read_build(~S,~C,~R),general_failure_read_build(~S,~C,~R),book)
154def resource_write_unsupported(~S:Data,~C:Type,~R:Type,~full:Layout.Layout,~route:Layout.Route,~valid:{Layout.resource_write_valid(~full,~route) == True{} : Bool},~local:{R == Layout.resources(~S,full) : Type},book:Book) -> Book & ResourceAccess.Writer<State.Scope<S,C,R>,Layout.payload(full,route),Layout.view(full,route)>:
155  (resource_book(book,Resources.Entry{route,Layout.key(full,route),Resources.Writable{}},D.Access{Layout.key(full,route),D.ResourceAccess{},D.Exclusive{},D.Writable{}},False{}),ResourceAccess.UnsupportedWriter{})
156def resource_write_provision(~S:Data,~C:Type,~R:Type,~Ops:Type -> Type,~selection:ResourceWriteSelection(~S,~C,~R,~State.Scope<S,C,R>,~Book,~Ops),book:Book) -> Book & Ops(State.Scope<S,C,R>):
157  selection(resource_write_build(~S,~C,~R),resource_write_unsupported(~S,~C,~R),book)
158def query_build(~S:Data,~C:Type,~R:Type,~layout:Layout.Layout,~route:Layout.Route,~same:{C == Layout.columns(~S,layout) : Type},~shape:{Layout.columns(~S,Layout.subtree(layout,route)) == Layout.query_pair(~S,~layout,~route) : Type},~valid:{Layout.query_valid(~layout,~route) == True{} : Bool},~Error:Data,~body:U32 -> Layout.query_view(layout,route) -> Layout.query_output(layout,route) -> Layout.query_output(layout,route) & Maybe<&2,Error>,mode:Q.Mode,book:Book) -> Book & Q.Each<S,State.Scope<S,C,R>,Error>:
159  accumulate(S,C,R,Q.Ops(~S,~Error),book,Q.layout_declaration(~S,~C,~R,~layout,~route,~same,~shape,~valid,~Error,~body,mode))
160
161def output_query_build(~S:Data,~C:Type,~R:Type,~layout:Layout.Layout,~route:Layout.Route,~same:{C == Layout.columns(~S,layout) : Type},~shape:{Layout.columns(~S,Layout.subtree(layout,route)) == Layout.query_pair(~S,~layout,~route) : Type},~valid:{Layout.query_valid(~layout,~route) == True{} : Bool},~O:Type,~Error:Data,~body:Q.OutputBody(~S,~layout,~route,~O,~Error),mode:Q.Mode,book:Book) -> Book & Q.OutputEach<S,State.Scope<S,C,R>,O,Error>:
162  accumulate(S,C,R,Q.OutputOps(~S,~O,~Error),book,Q.output_declaration(~S,~C,~R,~layout,~route,~same,~shape,~valid,~O,~Error,~body,mode))
163
164def sequential_output_query_build(~S:Data,~C:Type,~R:Type,~F:Type -> Type,~effects:E.Effects<F>,~Permit:Data,~layout:Layout.Layout,~route:Layout.Route,~same:{C == Layout.columns(~S,layout) : Type},~shape:{Layout.columns(~S,Layout.subtree(layout,route)) == Layout.query_pair(~S,~layout,~route) : Type},~valid:{Layout.query_valid(~layout,~route) == True{} : Bool},~O:Type,~Error:Data,~body:Q.SequentialOutputBody(~S,~Permit,~F,~layout,~route,~O,~Error),mode:Q.Mode,book:Book) -> Book & Q.SequentialOutputEach<S,Permit,F,State.Scope<S,C,R>,O,Error>:
165  accumulate(S,C,R,Q.SequentialOutputOps(~S,~Permit,~F,~O,~Error),book,Q.sequential_output_declaration(~S,~Permit,~F,~effects,~C,~R,~layout,~route,~same,~shape,~valid,~O,~Error,~body,mode))
166
167def unsupported_caps(~S:Data,~P:Type,~V:Data,~H:Type,kind:Recipe.QueryKind) -> Q.GeneralOps(~S,~P,~V,kind,H):
168  match kind:
169    case Recipe.ReadRows{}:Q.UnsupportedReader{}
170    case Recipe.WriteRows{}:Q.UnsupportedWriter{}
171def general_book(book:Book,recipe:Recipe.Entry,access:List<&2,D.Access>,available:Bool) -> Book:
172  match book:
173    case Book{previous,recipes,resources,supported}:Book{List.append(&2,D.Access,access,previous),recipe <> recipes,resources,Bool.and(supported,available)}
174def general_access(key:String,kind:Recipe.QueryKind) -> D.Access:
175  match kind:
176    case Recipe.ReadRows{}:D.Access{key,D.ComponentAccess{},D.SharedView{},D.ReadOnly{}}
177    case Recipe.WriteRows{}:D.Access{key,D.ComponentAccess{},D.Exclusive{},D.Writable{}}
178def bound_access(~full:Layout.Layout,selection:Recipe.Bound) -> List<&2,D.Access>:
179  match selection:
180    case Recipe.AllLive{}:[]
181    case Recipe.With{route}:[D.Access{Layout.key(full,route),D.ComponentAccess{},D.SharedView{},D.ReadOnly{}}]
182    case Recipe.Without{route}:[D.Access{Layout.key(full,route),D.ComponentAccess{},D.SharedView{},D.ReadOnly{}}]
183    case Recipe.Changed{route}:[D.Access{Layout.key(full,route),D.ComponentAccess{},D.SharedView{},D.ReadOnly{}}]
184    case Recipe.And{left,right}:List.append(&2,D.Access,bound_access(~full,left),bound_access(~full,right))
185    case Recipe.Or{left,right}:List.append(&2,D.Access,bound_access(~full,left),bound_access(~full,right))
186def general_unsupported(~S:Data,~WC:Type,~C:Type,~R:Type,~full:Layout.Layout,~route:Layout.Route,~same:{WC == Layout.columns(~S,full) : Type},~valid:{Layout.grant_valid(~full,~route) == True{} : Bool},~local:{C == Layout.columns(~S,full) : Type},~kind:Recipe.QueryKind,~bound:Recipe.Bound,~presence:Match.Presence,~predicate:Maybe<&2,Layout.view(full,route)> -> Bool,book:Book) -> Book & Q.GeneralOps(~S,~Layout.payload(full,route),~Layout.view(full,route),kind,State.Scope<S,C,R>):
187  (general_book(book,Recipe.Entry{route,kind,bound,presence},general_access(Layout.key(full,route),kind) <> bound_access(~full,bound),False{}),unsupported_caps(~S,~Layout.payload(full,route),~Layout.view(full,route),~State.Scope<S,C,R>,kind))
188def general_output_unsupported(~S:Data,~WC:Type,~C:Type,~R:Type,~full:Layout.Layout,~route:Layout.Route,~same:{WC == Layout.columns(~S,full) : Type},~valid:{Layout.grant_valid(~full,~route) == True{} : Bool},~local:{C == Layout.columns(~S,full) : Type},~bound:Recipe.Bound,~presence:Match.Presence,~predicate:Maybe<&2,Layout.view(full,route)> -> Bool,~O:Type,~E:Data,~body:W.Handle<S> -> Layout.view(full,route) -> Layout.payload(full,route) -> O -> Layout.payload(full,route) & (O & Maybe<&2,E>),book:Book) -> Book & Q.GeneralOutputWriter<S,State.Scope<S,C,R>,Layout.payload(full,route),Layout.view(full,route),O,E>:
189  (general_book(book,Recipe.Entry{route,Recipe.WriteRows{},bound,presence},general_access(Layout.key(full,route),Recipe.WriteRows{}) <> bound_access(~full,bound),False{}),Q.UnsupportedOutputWriter{})
190def sequential_general_unsupported(~S:Data,~WC:Type,~C:Type,~R:Type,~F:Type -> Type,~effects:E.Effects<F>,~Permit:Data,~full:Layout.Layout,~route:Layout.Route,~same:{WC == Layout.columns(~S,full) : Type},~valid:{Layout.grant_valid(~full,~route) == True{} : Bool},~local:{C == Layout.columns(~S,full) : Type},~bound:Recipe.Bound,~presence:Match.Presence,~predicate:Maybe<&2,Layout.view(full,route)> -> Bool,~O:Type,~Error:Data,~body:Q.SequentialGeneralBody(~S,~Permit,~F,~Layout.payload(full,route),~Layout.view(full,route),~O,~Error),mode:Q.Mode,book:Book) -> Book & Q.SequentialOutputEach<S,Permit,F,State.Scope<S,C,R>,O,Error>:
191  (general_book(book,Recipe.Entry{route,Recipe.WriteRows{},bound,presence},general_access(Layout.key(full,route),Recipe.WriteRows{}) <> bound_access(~full,bound),False{}),Q.SequentialOutputEach{scope=>output=>E.pure(~F,(State.Scope<S,C,R> & (O & Q.Report<Error>)),effects,(scope,(output,Q.LayoutRefused{})))})
192def query_provision(~S:Data,~WC:Type,~C:Type,~R:Type,~F:Type -> Type,~effects:E.Effects<F>,~Ops:Type -> Type,~selection:QuerySelection(~S,~WC,~C,~R,~F,~State.Scope<S,C,R>,~Book,~Ops),book:Book) -> Book & Ops(State.Scope<S,C,R>):
193  selection(query_build(~S,~C,~R),output_query_build(~S,~C,~R),sequential_output_query_build(~S,~C,~R,~F,~effects),general_unsupported(~S,~WC,~C,~R),general_output_unsupported(~S,~WC,~C,~R),sequential_general_unsupported(~S,~WC,~C,~R,~F,~effects),book)
194def removed_lifecycle_build(~S:Data,~WC:Type,~C:Type,~R:Type,~layout:Layout.Layout,~route:Layout.Route,~same:{WC == Layout.columns(~S,layout) : Type},~valid:{Layout.grant_valid(~layout,~route) == True{} : Bool},book:Book) -> Book & Life.Next<S,State.Scope<S,C,R>,Layout.origin(layout,route),Notice.Removed{Layout.key(layout,route)}>:
195  accumulate(S,C,R,Life.Ops(~S,~(Layout.origin(layout,route)),~(Notice.Removed{Layout.key(layout,route)})),book,Life.removed(~S,~WC,~C,~R,~layout,~route,~same,~valid))
196def despawn_lifecycle_build(~S:Data,~WC:Type,~C:Type,~R:Type,book:Book) -> Book & Life.Next<S,State.Scope<S,C,R>,Layout.EmptyLayout{},Notice.Despawned{}>:
197  accumulate(S,C,R,Life.Ops(~S,~(Layout.EmptyLayout{}),~(Notice.Despawned{})),book,Life.despawned(~S,~C,~R))
198def lifecycle_provision(~S:Data,~WC:Type,~C:Type,~R:Type,~Ops:Type -> Type,~selection:LifecycleSelection(~S,~WC,~C,~R,~State.Scope<S,C,R>,~Book,~Ops),book:Book) -> Book & Ops(State.Scope<S,C,R>):
199  selection(removed_lifecycle_build(~S,~WC,~C,~R),despawn_lifecycle_build(~S,~WC,~C,~R),book)
200def provision(~S:Data,~WC:Type,~C:Type,~R:Type,~Permit:Data,~Ops:Data -> (Type -> Type) -> Type -> Type,~selection:Selection(~S,~WC,~C,~R,~Permit,~StateEffect.Transition(~State.Invocation<S>),~State.Scope<S,C,R>,~Book,~Ops),book:Book) -> Book & Ops(Permit,StateEffect.Transition(~State.Invocation<S>),State.Scope<S,C,R>):
201  selection(component_read_build(~S,~C,~R),component_write_build(~S,~C,~R),resource_read_provision(~S,~C,~R),resource_write_provision(~S,~C,~R),query_provision(~S,~WC,~C,~R,~StateEffect.Transition(~State.Invocation<S>),~StateEffect.dictionary(~State.Invocation<S>)),lifecycle_provision(~S,~WC,~C,~R),book)
202def compilation_checked(~S:Data,~WC:Type,~C:Type,~R:Type,~Ops:Data -> (Type -> Type) -> Type -> Type,caps:Ops(Effect.Granted,StateEffect.Transition(~State.Invocation<S>),State.Scope<S,C,R>),access:List<&2,D.Access>,recipes:List<&2,Recipe.Entry>,resources:List<&2,Resources.Entry>,supported:Bool) -> D.Compilation<S,WC,C,R,Ops>:
203  match supported:
204    case True{}:D.Supported{D.Declaration{caps,access},D.Recipes{Recipe.brand(S,WC,recipes),resources}}
205    case False{}:D.Unsupported{caps,access,D.Recipes{Recipe.brand(S,WC,recipes),resources}}
206def compiled(~S:Data,~WC:Type,~C:Type,~R:Type,~Ops:Data -> (Type -> Type) -> Type -> Type,result:Book & Ops(Effect.Granted,StateEffect.Transition(~State.Invocation<S>),State.Scope<S,C,R>)) -> D.Compilation<S,WC,C,R,Ops>:
207  match result:
208    case (Book{access,recipes,resources,supported},caps):compilation_checked(~S,~WC,~C,~R,~Ops,caps,access,recipes,resources,supported)
209def compile_framework(~S:Data,~WC:Type,~C:Type,~R:Type,~Ops:Data -> (Type -> Type) -> Type -> Type,~program:FrameworkProgram(~S,~WC,~C,~R,~Ops)) -> D.Compilation<S,WC,C,R,Ops>:
210  compiled(~S,~WC,~C,~R,~Ops,program(Effect.Granted,Effect.Granted{},StateEffect.Transition(~State.Invocation<S>),StateEffect.dictionary(~State.Invocation<S>),State.request(~S),State.Scope<S,C,R>,Book,provision(~S,~WC,~C,~R,~Effect.Granted),Book{[],[],[],True{}}))
211
212def compile(~S:Data,~WC:Type,~C:Type,~R:Type,~Ops:Data -> (Type -> Type) -> Type -> Type,~program:Program(~S,~WC,~C,~R,~Ops)) -> D.Compilation<S,WC,C,R,Ops>:
213  compile_framework(~S,~WC,~C,~R,~Ops,~framework_program(~S,~WC,~C,~R,~Ops,~program))
214def general_selection(~S:Data,~WC:Type,~C:Type,~R:Type,~F:Type -> Type,~full:Layout.Layout,~route:Layout.Route,~same:{WC == Layout.columns(~S,full) : Type},~valid:{Layout.grant_valid(~full,~route) == True{} : Bool},~local:{C == Layout.columns(~S,full) : Type},~kind:Recipe.QueryKind,~bound:Recipe.Bound,~presence:Match.Presence,~predicate:Maybe<&2,Layout.view(full,route)> -> Bool,~H:Type,~B:Type,~basic:BasicQuery(~S,~C,~R,~H,~B),~output:OutputQuery(~S,~C,~R,~H,~B),~sequentialOutput:SequentialOutputQuery(~S,~C,~R,~F,~H,~B),~general:GeneralQuery(~S,~WC,~C,~R,~H,~B),~generalOutput:GeneralOutputQuery(~S,~WC,~C,~R,~H,~B),~sequentialGeneral:SequentialGeneralQuery(~S,~WC,~C,~R,~F,~H,~B),book:B) -> B & Q.GeneralOps(~S,~Layout.payload(full,route),~Layout.view(full,route),kind,H):
215  general(full,route,same,valid,local,kind,bound,presence,predicate,book)
216def general_query(~S:Data,~WC:Type,~C:Type,~R:Type,~F:Type -> Type,~full:Layout.Layout,~route:Layout.Route,~same:{WC == Layout.columns(~S,full) : Type},~valid:{Layout.grant_valid(~full,~route) == True{} : Bool},~local:{C == Layout.columns(~S,full) : Type},~kind:Recipe.QueryKind,~bound:Recipe.Bound,~presence:Match.Presence,~predicate:Maybe<&2,Layout.view(full,route)> -> Bool,~H:Type,~B:Type,~query:Query(~S,~WC,~C,~R,~F,~H,~B),book:B) -> B & Q.GeneralOps(~S,~Layout.payload(full,route),~Layout.view(full,route),kind,H):
217  query(Q.GeneralOps(~S,~Layout.payload(full,route),~Layout.view(full,route),kind),general_selection(~S,~WC,~C,~R,~F,~full,~route,~same,~valid,~local,~kind,~bound,~presence,~predicate,~H,~B),book)
218# Trusted interpretation dictionary; the closed Program remains the sole grant
219# source. This callback cannot supply an unrelated Book or metadata catalog.
220def OrdinaryGeneralProvider(~S:Data,~WC:Type,~C:Type,~R:Type) -> Type:
221  @-full:Layout.Layout -> @-route:Layout.Route -> @-same:{WC == Layout.columns(~S,full) : Type} -> @-valid:{Layout.grant_valid(~full,~route) == True{} : Bool} -> @-local:{C == Layout.columns(~S,full) : Type} -> @-kind:Recipe.QueryKind -> @-bound:Recipe.Bound -> @-presence:Match.Presence -> @-predicate:(Maybe<&2,Layout.view(full,route)> -> Bool) -> Q.GeneralOps(~S,~Layout.payload(full,route),~Layout.view(full,route),kind,State.Scope<S,C,R>)
222def OutputGeneralProvider(~S:Data,~WC:Type,~C:Type,~R:Type) -> Type:
223  @-full:Layout.Layout -> @-route:Layout.Route -> @-same:{WC == Layout.columns(~S,full) : Type} -> @-valid:{Layout.grant_valid(~full,~route) == True{} : Bool} -> @-local:{C == Layout.columns(~S,full) : Type} -> @-bound:Recipe.Bound -> @-presence:Match.Presence -> @-predicate:(Maybe<&2,Layout.view(full,route)> -> Bool) -> @-O:Type -> @-E:Data -> @-body:(W.Handle<S> -> Layout.view(full,route) -> Layout.payload(full,route) -> O -> Layout.payload(full,route) & (O & Maybe<&2,E>)) -> Q.GeneralOutputWriter<S,State.Scope<S,C,R>,Layout.payload(full,route),Layout.view(full,route),O,E>
224def SequentialGeneralProvider(~S:Data,~WC:Type,~C:Type,~R:Type,~F:Type -> Type) -> Type:
225  @-Permit:Data -> @-full:Layout.Layout -> @-route:Layout.Route -> @-same:{WC == Layout.columns(~S,full) : Type} -> @-valid:{Layout.grant_valid(~full,~route) == True{} : Bool} -> @-local:{C == Layout.columns(~S,full) : Type} -> @-bound:Recipe.Bound -> @-presence:Match.Presence -> @-predicate:(Maybe<&2,Layout.view(full,route)> -> Bool) -> @-O:Type -> @-Error:Data -> @-body:Q.SequentialGeneralBody(~S,~Permit,~F,~Layout.payload(full,route),~Layout.view(full,route),~O,~Error) -> Q.Mode -> Q.SequentialOutputEach<S,Permit,F,State.Scope<S,C,R>,O,Error>
226
227def GeneralProviderSelection(~S:Data,~WC:Type,~C:Type,~R:Type,~F:Type -> Type,~Ops:Type) -> Type:
228  @-ordinary:OrdinaryGeneralProvider(~S,~WC,~C,~R) -> @-output:OutputGeneralProvider(~S,~WC,~C,~R) -> @-sequential:SequentialGeneralProvider(~S,~WC,~C,~R,~F) -> Ops
229def GeneralProvider(~S:Data,~WC:Type,~C:Type,~R:Type,~F:Type -> Type) -> Type:
230  @-Ops:Type -> @-selection:GeneralProviderSelection(~S,~WC,~C,~R,~F,~Ops) -> Ops
231def ordinary_provider_selection(~S:Data,~WC:Type,~C:Type,~R:Type,~F:Type -> Type,~full:Layout.Layout,~route:Layout.Route,~same:{WC == Layout.columns(~S,full) : Type},~valid:{Layout.grant_valid(~full,~route) == True{} : Bool},~local:{C == Layout.columns(~S,full) : Type},~kind:Recipe.QueryKind,~bound:Recipe.Bound,~presence:Match.Presence,~predicate:Maybe<&2,Layout.view(full,route)> -> Bool,~ordinary:OrdinaryGeneralProvider(~S,~WC,~C,~R),~output:OutputGeneralProvider(~S,~WC,~C,~R),~sequential:SequentialGeneralProvider(~S,~WC,~C,~R,~F)) -> Q.GeneralOps(~S,~Layout.payload(full,route),~Layout.view(full,route),kind,State.Scope<S,C,R>):
232  ordinary(full,route,same,valid,local,kind,bound,presence,predicate)
233def output_provider_selection(~S:Data,~WC:Type,~C:Type,~R:Type,~F:Type -> Type,~full:Layout.Layout,~route:Layout.Route,~same:{WC == Layout.columns(~S,full) : Type},~valid:{Layout.grant_valid(~full,~route) == True{} : Bool},~local:{C == Layout.columns(~S,full) : Type},~bound:Recipe.Bound,~presence:Match.Presence,~predicate:Maybe<&2,Layout.view(full,route)> -> Bool,~O:Type,~E:Data,~body:W.Handle<S> -> Layout.view(full,route) -> Layout.payload(full,route) -> O -> Layout.payload(full,route) & (O & Maybe<&2,E>),~ordinary:OrdinaryGeneralProvider(~S,~WC,~C,~R),~output:OutputGeneralProvider(~S,~WC,~C,~R),~sequential:SequentialGeneralProvider(~S,~WC,~C,~R,~F)) -> Q.GeneralOutputWriter<S,State.Scope<S,C,R>,Layout.payload(full,route),Layout.view(full,route),O,E>:
234  output(full,route,same,valid,local,bound,presence,predicate,O,E,body)
235def general_build(~S:Data,~WC:Type,~C:Type,~R:Type,~F:Type -> Type,~provider:GeneralProvider(~S,~WC,~C,~R,~F),~full:Layout.Layout,~route:Layout.Route,~same:{WC == Layout.columns(~S,full) : Type},~valid:{Layout.grant_valid(~full,~route) == True{} : Bool},~local:{C == Layout.columns(~S,full) : Type},~kind:Recipe.QueryKind,~bound:Recipe.Bound,~presence:Match.Presence,~predicate:Maybe<&2,Layout.view(full,route)> -> Bool,book:Book) -> Book & Q.GeneralOps(~S,~Layout.payload(full,route),~Layout.view(full,route),kind,State.Scope<S,C,R>):
236  (general_book(book,Recipe.Entry{route,kind,bound,presence},general_access(Layout.key(full,route),kind) <> bound_access(~full,bound),True{}),provider(Q.GeneralOps(~S,~Layout.payload(full,route),~Layout.view(full,route),kind,State.Scope<S,C,R>),ordinary_provider_selection(~S,~WC,~C,~R,~F,~full,~route,~same,~valid,~local,~kind,~bound,~presence,~predicate)))
237def general_output_build(~S:Data,~WC:Type,~C:Type,~R:Type,~F:Type -> Type,~provider:GeneralProvider(~S,~WC,~C,~R,~F),~full:Layout.Layout,~route:Layout.Route,~same:{WC == Layout.columns(~S,full) : Type},~valid:{Layout.grant_valid(~full,~route) == True{} : Bool},~local:{C == Layout.columns(~S,full) : Type},~bound:Recipe.Bound,~presence:Match.Presence,~predicate:Maybe<&2,Layout.view(full,route)> -> Bool,~O:Type,~E:Data,~body:W.Handle<S> -> Layout.view(full,route) -> Layout.payload(full,route) -> O -> Layout.payload(full,route) & (O & Maybe<&2,E>),book:Book) -> Book & Q.GeneralOutputWriter<S,State.Scope<S,C,R>,Layout.payload(full,route),Layout.view(full,route),O,E>:
238  (general_book(book,Recipe.Entry{route,Recipe.WriteRows{},bound,presence},general_access(Layout.key(full,route),Recipe.WriteRows{}) <> bound_access(~full,bound),True{}),provider(Q.GeneralOutputWriter<S,State.Scope<S,C,R>,Layout.payload(full,route),Layout.view(full,route),O,E>,output_provider_selection(~S,~WC,~C,~R,~F,~full,~route,~same,~valid,~local,~bound,~presence,~predicate,~O,~E,~body)))
239def sequential_provider_selection(~S:Data,~WC:Type,~C:Type,~R:Type,~F:Type -> Type,~Permit:Data,~full:Layout.Layout,~route:Layout.Route,~same:{WC == Layout.columns(~S,full) : Type},~valid:{Layout.grant_valid(~full,~route) == True{} : Bool},~local:{C == Layout.columns(~S,full) : Type},~bound:Recipe.Bound,~presence:Match.Presence,~predicate:Maybe<&2,Layout.view(full,route)> -> Bool,~O:Type,~Error:Data,~body:Q.SequentialGeneralBody(~S,~Permit,~F,~Layout.payload(full,route),~Layout.view(full,route),~O,~Error),~ordinary:OrdinaryGeneralProvider(~S,~WC,~C,~R),~output:OutputGeneralProvider(~S,~WC,~C,~R),~sequential:SequentialGeneralProvider(~S,~WC,~C,~R,~F)) -> Q.Mode -> Q.SequentialOutputEach<S,Permit,F,State.Scope<S,C,R>,O,Error>:
240  sequential(Permit,full,route,same,valid,local,bound,presence,predicate,O,Error,body)
241
242def sequential_general_build(~S:Data,~WC:Type,~C:Type,~R:Type,~F:Type -> Type,~provider:GeneralProvider(~S,~WC,~C,~R,~F),~Permit:Data,~full:Layout.Layout,~route:Layout.Route,~same:{WC == Layout.columns(~S,full) : Type},~valid:{Layout.grant_valid(~full,~route) == True{} : Bool},~local:{C == Layout.columns(~S,full) : Type},~bound:Recipe.Bound,~presence:Match.Presence,~predicate:Maybe<&2,Layout.view(full,route)> -> Bool,~O:Type,~Error:Data,~body:Q.SequentialGeneralBody(~S,~Permit,~F,~Layout.payload(full,route),~Layout.view(full,route),~O,~Error),mode:Q.Mode,book:Book) -> Book & Q.SequentialOutputEach<S,Permit,F,State.Scope<S,C,R>,O,Error>:
243  (general_book(book,Recipe.Entry{route,Recipe.WriteRows{},bound,presence},general_access(Layout.key(full,route),Recipe.WriteRows{}) <> bound_access(~full,bound),True{}),provider(Q.Mode -> Q.SequentialOutputEach<S,Permit,F,State.Scope<S,C,R>,O,Error>,sequential_provider_selection(~S,~WC,~C,~R,~F,~Permit,~full,~route,~same,~valid,~local,~bound,~presence,~predicate,~O,~Error,~body))(mode))
244def query_provision_with(~S:Data,~WC:Type,~C:Type,~R:Type,~F:Type -> Type,~effects:E.Effects<F>,~provider:GeneralProvider(~S,~WC,~C,~R,~F),~Ops:Type -> Type,~selection:QuerySelection(~S,~WC,~C,~R,~F,~State.Scope<S,C,R>,~Book,~Ops),book:Book) -> Book & Ops(State.Scope<S,C,R>):
245  selection(query_build(~S,~C,~R),output_query_build(~S,~C,~R),sequential_output_query_build(~S,~C,~R,~F,~effects),general_build(~S,~WC,~C,~R,~F,~provider),general_output_build(~S,~WC,~C,~R,~F,~provider),sequential_general_build(~S,~WC,~C,~R,~F,~provider),book)
246def provision_with_general(~S:Data,~WC:Type,~C:Type,~R:Type,~Permit:Data,~provider:GeneralProvider(~S,~WC,~C,~R,~StateEffect.Transition(~State.Invocation<S>)),~Ops:Data -> (Type -> Type) -> Type -> Type,~selection:Selection(~S,~WC,~C,~R,~Permit,~StateEffect.Transition(~State.Invocation<S>),~State.Scope<S,C,R>,~Book,~Ops),book:Book) -> Book & Ops(Permit,StateEffect.Transition(~State.Invocation<S>),State.Scope<S,C,R>):
247  selection(component_read_build(~S,~C,~R),component_write_build(~S,~C,~R),resource_read_provision(~S,~C,~R),resource_write_provision(~S,~C,~R),query_provision_with(~S,~WC,~C,~R,~StateEffect.Transition(~State.Invocation<S>),~StateEffect.dictionary(~State.Invocation<S>),~provider),lifecycle_provision(~S,~WC,~C,~R),book)
248def compile_framework_with_general(~S:Data,~WC:Type,~C:Type,~R:Type,~provider:GeneralProvider(~S,~WC,~C,~R,~StateEffect.Transition(~State.Invocation<S>)),~Ops:Data -> (Type -> Type) -> Type -> Type,~program:FrameworkProgram(~S,~WC,~C,~R,~Ops)) -> D.Compilation<S,WC,C,R,Ops>:
249  compiled(~S,~WC,~C,~R,~Ops,program(Effect.Granted,Effect.Granted{},StateEffect.Transition(~State.Invocation<S>),StateEffect.dictionary(~State.Invocation<S>),State.request(~S),State.Scope<S,C,R>,Book,provision_with_general(~S,~WC,~C,~R,~Effect.Granted,~provider),Book{[],[],[],True{}}))
250
251# These dictionaries interpret the same closed selections; they add no grants.
252
253def compile_with_general(~S:Data,~WC:Type,~C:Type,~R:Type,~provider:GeneralProvider(~S,~WC,~C,~R,~StateEffect.Transition(~State.Invocation<S>)),~Ops:Data -> (Type -> Type) -> Type -> Type,~program:Program(~S,~WC,~C,~R,~Ops)) -> D.Compilation<S,WC,C,R,Ops>:
254  compile_framework_with_general(~S,~WC,~C,~R,~provider,~Ops,~framework_program(~S,~WC,~C,~R,~Ops,~program))
255def ResourceReadProvider(~S:Data,~C:Type,~R:Type) -> Type:
256  @-full:Layout.Layout -> @-route:Layout.Route -> @-valid:{Layout.grant_valid(~full,~route) == True{} : Bool} -> @-local:{R == Layout.resources(~S,full) : Type} -> ResourceAccess.Reader<State.Scope<S,C,R>,Layout.view(full,route)>
257def ResourceWriteProvider(~S:Data,~C:Type,~R:Type) -> Type:
258  @-full:Layout.Layout -> @-route:Layout.Route -> @-valid:{Layout.resource_write_valid(~full,~route) == True{} : Bool} -> @-local:{R == Layout.resources(~S,full) : Type} -> ResourceAccess.Writer<State.Scope<S,C,R>,Layout.payload(full,route),Layout.view(full,route)>
259def general_resource_read_selection(~S:Data,~C:Type,~R:Type,~H:Type,~B:Type,~full:Layout.Layout,~route:Layout.Route,~valid:{Layout.grant_valid(~full,~route) == True{} : Bool},~local:{R == Layout.resources(~S,full) : Type},~basic:BasicResourceRead(~S,~C,~R,~H,~B),~general:GeneralResourceRead(~S,~C,~R,~H,~B),~failure:FailureRead(~S,~C,~R,~H,~B),~general_failure:GeneralFailureRead(~S,~C,~R,~H,~B),book:B) -> B & ResourceAccess.Reader<H,Layout.view(full,route)>:
260  general(full,route,valid,local,book)
261def general_resource_read(~S:Data,~C:Type,~R:Type,~H:Type,~B:Type,~full:Layout.Layout,~route:Layout.Route,~valid:{Layout.grant_valid(~full,~route) == True{} : Bool},~local:{R == Layout.resources(~S,full) : Type},~resource:ResourceRead(~S,~C,~R,~H,~B),book:B) -> B & ResourceAccess.Reader<H,Layout.view(full,route)>:
262  resource(ResourceAccess.Reads(~Layout.view(full,route)),general_resource_read_selection(~S,~C,~R,~H,~B,~full,~route,~valid,~local),book)
263def general_resource_write_selection(~S:Data,~C:Type,~R:Type,~H:Type,~B:Type,~full:Layout.Layout,~route:Layout.Route,~valid:{Layout.resource_write_valid(~full,~route) == True{} : Bool},~local:{R == Layout.resources(~S,full) : Type},~basic:BasicResourceWrite(~S,~C,~R,~H,~B),~general:GeneralResourceWrite(~S,~C,~R,~H,~B),book:B) -> B & ResourceAccess.Writer<H,Layout.payload(full,route),Layout.view(full,route)>:
264  general(full,route,valid,local,book)
265def general_resource_write(~S:Data,~C:Type,~R:Type,~H:Type,~B:Type,~full:Layout.Layout,~route:Layout.Route,~valid:{Layout.resource_write_valid(~full,~route) == True{} : Bool},~local:{R == Layout.resources(~S,full) : Type},~resource:ResourceWrite(~S,~C,~R,~H,~B),book:B) -> B & ResourceAccess.Writer<H,Layout.payload(full,route),Layout.view(full,route)>:
266  resource(ResourceAccess.Writes(~Layout.payload(full,route),~Layout.view(full,route)),general_resource_write_selection(~S,~C,~R,~H,~B,~full,~route,~valid,~local),book)
267def resource_read_with(~S:Data,~C:Type,~R:Type,~provider:ResourceReadProvider(~S,~C,~R),~full:Layout.Layout,~route:Layout.Route,~valid:{Layout.grant_valid(~full,~route) == True{} : Bool},~local:{R == Layout.resources(~S,full) : Type},book:Book) -> Book & ResourceAccess.Reader<State.Scope<S,C,R>,Layout.view(full,route)>:
268  (resource_book(book,Resources.Entry{route,Layout.key(full,route),Resources.ReadOnly{}},D.Access{Layout.key(full,route),D.ResourceAccess{},D.SharedView{},D.ReadOnly{}},True{}),provider(full,route,valid,local))
269def resource_write_with(~S:Data,~C:Type,~R:Type,~provider:ResourceWriteProvider(~S,~C,~R),~full:Layout.Layout,~route:Layout.Route,~valid:{Layout.resource_write_valid(~full,~route) == True{} : Bool},~local:{R == Layout.resources(~S,full) : Type},book:Book) -> Book & ResourceAccess.Writer<State.Scope<S,C,R>,Layout.payload(full,route),Layout.view(full,route)>:
270  (resource_book(book,Resources.Entry{route,Layout.key(full,route),Resources.Writable{}},D.Access{Layout.key(full,route),D.ResourceAccess{},D.Exclusive{},D.Writable{}},True{}),provider(full,route,valid,local))
271def resource_read_provision_with(~S:Data,~C:Type,~R:Type,~provider:ResourceReadProvider(~S,~C,~R),~Ops:Type -> Type,~selection:ResourceReadSelection(~S,~C,~R,~State.Scope<S,C,R>,~Book,~Ops),book:Book) -> Book & Ops(State.Scope<S,C,R>):
272  selection(resource_read_build(S,C,R),resource_read_with(~S,~C,~R,~provider),failure_read_build(~S,~C,~R),general_failure_read_build(~S,~C,~R),book)
273def resource_write_provision_with(~S:Data,~C:Type,~R:Type,~provider:ResourceWriteProvider(~S,~C,~R),~Ops:Type -> Type,~selection:ResourceWriteSelection(~S,~C,~R,~State.Scope<S,C,R>,~Book,~Ops),book:Book) -> Book & Ops(State.Scope<S,C,R>):
274  selection(resource_write_build(~S,~C,~R),resource_write_with(~S,~C,~R,~provider),book)
275def provision_with_interpreters(~S:Data,~WC:Type,~C:Type,~R:Type,~Permit:Data,~queryProvider:GeneralProvider(~S,~WC,~C,~R,~StateEffect.Transition(~State.Invocation<S>)),~readProvider:ResourceReadProvider(~S,~C,~R),~writeProvider:ResourceWriteProvider(~S,~C,~R),~Ops:Data -> (Type -> Type) -> Type -> Type,~selection:Selection(~S,~WC,~C,~R,~Permit,~StateEffect.Transition(~State.Invocation<S>),~State.Scope<S,C,R>,~Book,~Ops),book:Book) -> Book & Ops(Permit,StateEffect.Transition(~State.Invocation<S>),State.Scope<S,C,R>):
276  selection(component_read_build(~S,~C,~R),component_write_build(~S,~C,~R),resource_read_provision_with(~S,~C,~R,~readProvider),resource_write_provision_with(~S,~C,~R,~writeProvider),query_provision_with(~S,~WC,~C,~R,~StateEffect.Transition(~State.Invocation<S>),~StateEffect.dictionary(~State.Invocation<S>),~queryProvider),lifecycle_provision(~S,~WC,~C,~R),book)
277def compile_framework_with_interpreters(~S:Data,~WC:Type,~C:Type,~R:Type,~queryProvider:GeneralProvider(~S,~WC,~C,~R,~StateEffect.Transition(~State.Invocation<S>)),~readProvider:ResourceReadProvider(~S,~C,~R),~writeProvider:ResourceWriteProvider(~S,~C,~R),~Ops:Data -> (Type -> Type) -> Type -> Type,~program:FrameworkProgram(~S,~WC,~C,~R,~Ops)) -> D.Compilation<S,WC,C,R,Ops>:
278  compiled(~S,~WC,~C,~R,~Ops,program(Effect.Granted,Effect.Granted{},StateEffect.Transition(~State.Invocation<S>),StateEffect.dictionary(~State.Invocation<S>),State.request(~S),State.Scope<S,C,R>,Book,provision_with_interpreters(~S,~WC,~C,~R,~Effect.Granted,~queryProvider,~readProvider,~writeProvider),Book{[],[],[],True{}}))
279
280def compile_with_interpreters(~S:Data,~WC:Type,~C:Type,~R:Type,~queryProvider:GeneralProvider(~S,~WC,~C,~R,~StateEffect.Transition(~State.Invocation<S>)),~readProvider:ResourceReadProvider(~S,~C,~R),~writeProvider:ResourceWriteProvider(~S,~C,~R),~Ops:Data -> (Type -> Type) -> Type -> Type,~program:Program(~S,~WC,~C,~R,~Ops)) -> D.Compilation<S,WC,C,R,Ops>:
281  compile_framework_with_interpreters(~S,~WC,~C,~R,~queryProvider,~readProvider,~writeProvider,~Ops,~framework_program(~S,~WC,~C,~R,~Ops,~program))
282
283def sequential_output_query_selection(~S:Data,~Permit:Data,~WC:Type,~C:Type,~R:Type,~F:Type -> Type,~layout:Layout.Layout,~route:Layout.Route,~same:{C == Layout.columns(~S,layout) : Type},~shape:{Layout.columns(~S,Layout.subtree(layout,route)) == Layout.query_pair(~S,~layout,~route) : Type},~valid:{Layout.query_valid(~layout,~route) == True{} : Bool},~O:Type,~Error:Data,~body:Q.SequentialOutputBody(~S,~Permit,~F,~layout,~route,~O,~Error),~mode:Q.Mode,~H:Type,~B:Type,~basic:BasicQuery(~S,~C,~R,~H,~B),~output:OutputQuery(~S,~C,~R,~H,~B),~sequentialOutput:SequentialOutputQuery(~S,~C,~R,~F,~H,~B),~general:GeneralQuery(~S,~WC,~C,~R,~H,~B),~generalOutput:GeneralOutputQuery(~S,~WC,~C,~R,~H,~B),~sequentialGeneral:SequentialGeneralQuery(~S,~WC,~C,~R,~F,~H,~B),book:B) -> B & Q.SequentialOutputEach<S,Permit,F,H,O,Error>:
284  sequentialOutput(Permit,layout,route,same,shape,valid,O,Error,body,mode,book)
285def sequential_output_query(~S:Data,~Permit:Data,~WC:Type,~C:Type,~R:Type,~F:Type -> Type,~layout:Layout.Layout,~route:Layout.Route,~same:{C == Layout.columns(~S,layout) : Type},~shape:{Layout.columns(~S,Layout.subtree(layout,route)) == Layout.query_pair(~S,~layout,~route) : Type},~valid:{Layout.query_valid(~layout,~route) == True{} : Bool},~O:Type,~Error:Data,~body:Q.SequentialOutputBody(~S,~Permit,~F,~layout,~route,~O,~Error),~mode:Q.Mode,~H:Type,~B:Type,~query:Query(~S,~WC,~C,~R,~F,~H,~B),book:B) -> B & Q.SequentialOutputEach<S,Permit,F,H,O,Error>:
286  query(Q.SequentialOutputOps(~S,~Permit,~F,~O,~Error),sequential_output_query_selection(~S,~Permit,~WC,~C,~R,~F,~layout,~route,~same,~shape,~valid,~O,~Error,~body,~mode,~H,~B),book)
287
288def general_output_selection(~S:Data,~WC:Type,~C:Type,~R:Type,~F:Type -> Type,~full:Layout.Layout,~route:Layout.Route,~same:{WC == Layout.columns(~S,full) : Type},~valid:{Layout.grant_valid(~full,~route) == True{} : Bool},~local:{C == Layout.columns(~S,full) : Type},~bound:Recipe.Bound,~presence:Match.Presence,~predicate:Maybe<&2,Layout.view(full,route)> -> Bool,~O:Type,~E:Data,~body:W.Handle<S> -> Layout.view(full,route) -> Layout.payload(full,route) -> O -> Layout.payload(full,route) & (O & Maybe<&2,E>),~H:Type,~B:Type,~basic:BasicQuery(~S,~C,~R,~H,~B),~output:OutputQuery(~S,~C,~R,~H,~B),~sequentialOutput:SequentialOutputQuery(~S,~C,~R,~F,~H,~B),~general:GeneralQuery(~S,~WC,~C,~R,~H,~B),~generalOutput:GeneralOutputQuery(~S,~WC,~C,~R,~H,~B),~sequentialGeneral:SequentialGeneralQuery(~S,~WC,~C,~R,~F,~H,~B),book:B) -> B & Q.GeneralOutputWriter<S,H,Layout.payload(full,route),Layout.view(full,route),O,E>:
289  generalOutput(full,route,same,valid,local,bound,presence,predicate,O,E,body,book)
290def general_output_query(~S:Data,~WC:Type,~C:Type,~R:Type,~F:Type -> Type,~full:Layout.Layout,~route:Layout.Route,~same:{WC == Layout.columns(~S,full) : Type},~valid:{Layout.grant_valid(~full,~route) == True{} : Bool},~local:{C == Layout.columns(~S,full) : Type},~bound:Recipe.Bound,~presence:Match.Presence,~predicate:Maybe<&2,Layout.view(full,route)> -> Bool,~O:Type,~E:Data,~body:W.Handle<S> -> Layout.view(full,route) -> Layout.payload(full,route) -> O -> Layout.payload(full,route) & (O & Maybe<&2,E>),~H:Type,~B:Type,~query:Query(~S,~WC,~C,~R,~F,~H,~B),book:B) -> B & Q.GeneralOutputWriter<S,H,Layout.payload(full,route),Layout.view(full,route),O,E>:
291  query(Q.GeneralOutputOps(~S,~Layout.payload(full,route),~Layout.view(full,route),~O,~E),general_output_selection(~S,~WC,~C,~R,~F,~full,~route,~same,~valid,~local,~bound,~presence,~predicate,~O,~E,~body,~H,~B),book)
292
293
294
295def sequential_general_selection(~S:Data,~WC:Type,~C:Type,~R:Type,~F:Type -> Type,~Permit:Data,~full:Layout.Layout,~route:Layout.Route,~same:{WC == Layout.columns(~S,full) : Type},~valid:{Layout.grant_valid(~full,~route) == True{} : Bool},~local:{C == Layout.columns(~S,full) : Type},~bound:Recipe.Bound,~presence:Match.Presence,~predicate:Maybe<&2,Layout.view(full,route)> -> Bool,~O:Type,~Error:Data,~body:Q.SequentialGeneralBody(~S,~Permit,~F,~Layout.payload(full,route),~Layout.view(full,route),~O,~Error),~mode:Q.Mode,~H:Type,~B:Type,~basic:BasicQuery(~S,~C,~R,~H,~B),~output:OutputQuery(~S,~C,~R,~H,~B),~sequentialOutput:SequentialOutputQuery(~S,~C,~R,~F,~H,~B),~general:GeneralQuery(~S,~WC,~C,~R,~H,~B),~generalOutput:GeneralOutputQuery(~S,~WC,~C,~R,~H,~B),~sequentialGeneral:SequentialGeneralQuery(~S,~WC,~C,~R,~F,~H,~B),book:B) -> B & Q.SequentialOutputEach<S,Permit,F,H,O,Error>:
296  sequentialGeneral(Permit,full,route,same,valid,local,bound,presence,predicate,O,Error,body,mode,book)
297
298def sequential_general_query(~S:Data,~Permit:Data,~WC:Type,~C:Type,~R:Type,~F:Type -> Type,~full:Layout.Layout,~route:Layout.Route,~same:{WC == Layout.columns(~S,full) : Type},~valid:{Layout.grant_valid(~full,~route) == True{} : Bool},~local:{C == Layout.columns(~S,full) : Type},~bound:Recipe.Bound,~presence:Match.Presence,~predicate:Maybe<&2,Layout.view(full,route)> -> Bool,~O:Type,~Error:Data,~body:Q.SequentialGeneralBody(~S,~Permit,~F,~Layout.payload(full,route),~Layout.view(full,route),~O,~Error),~mode:Q.Mode,~H:Type,~B:Type,~query:Query(~S,~WC,~C,~R,~F,~H,~B),book:B) -> B & Q.SequentialOutputEach<S,Permit,F,H,O,Error>:
299  query(Q.SequentialOutputOps(~S,~Permit,~F,~O,~Error),sequential_general_selection(~S,~WC,~C,~R,~F,~Permit,~full,~route,~same,~valid,~local,~bound,~presence,~predicate,~O,~Error,~body,~mode,~H,~B),book)