1 import Base 2 import ./execution_effects.bend as E 3 import ./execution_state_effect.bend as StateEffect 4 import ./world.bend as W 5 import ./execution_relation_failure_provider.bend as FailureProvider 6 import ./execution_relation_failure_access.bend as FailureAccess 7 import ./execution_relation_store.bend as RelationStore 8 import ./execution_resource_policy.bend as Policy 9 import ./relation_types.bend as T 10 import ./execution_reservation_authority.bend as Effect 11 import ./execution_lifecycle_access.bend as Life 12 import ./execution_lifecycle_notices.bend as Notice 13 import ./execution_state.bend as State 14 import ./execution_composer_layout.bend as Layout 15 import ./execution_layout_access.bend as LayoutAccess 16 import ./execution_declaration.bend as D 17 import ./execution_access.bend as A 18 import ./execution_query.bend as Q 19 import ./execution_query_recipe.bend as Recipe 20 import ./execution_query_matches.bend as Match 21 import ./execution_resource_recipe.bend as Resources 22 import ./execution_resource_access.bend as ResourceAccess 23 24 type Book is Type: 25 Book{access:List<&2,D.Access>,queryRecipes:List<&2,Recipe.Entry>,resourceRecipes:List<&2,Resources.Entry>,supported:Bool} 26 def 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 28 29 def 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 31 32 def 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 34 35 def 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 37 38 def 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 40 def 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 -> @-payload:{Layout.payload(full,route) == RelationStore.Store : Type} -> @-view:{Layout.view(full,route) == RelationStore.View : 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 42 def 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 -> @-payload:{Layout.payload(full,route) == RelationStore.Store : Type} -> @-view:{Layout.view(full,route) == RelationStore.View : Data} -> @-protected:{Layout.policy(full,route) == Policy.ProtectedRelation{S,descriptor} : Policy.Policy} -> @-local:{R == Layout.resources(~S,full) : Type} -> B -> B & FailureAccess.Read 44 def 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) 46 def 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) 48 def 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: 49 basic(layout,route,same,valid,book) 50 def 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: 51 resource(A.ResourceReads(~Layout.view(layout,route)),basic => general => failure => general_failure => selected => basic(layout,route,same,valid,selected),book) 52 def 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 54 def 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) 56 def 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) 58 def 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: 59 basic(layout,route,same,valid,book) 60 def 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: 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 63 def 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 65 66 def 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 68 def 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 70 def OutputQuery(~S:Data,~C:Type,~R:Type,~H:Type,~B:Type) -> Type: 71 PureOutputQuery(~S,~C,~R,~H,~B) 72 def 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) 74 def 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 -> Layout.view(full,route) -> Layout.payload(full,route) -> O -> Layout.payload(full,route) & (O & Maybe<&2,E>)) -> B -> B & Q.GeneralOutputWriter 76 def 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 78 79 def 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) 81 def 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 84 def 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: 85 basic(layout,route,same,shape,valid,Error,body,mode,book) 86 def 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: 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) 88 def 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: 89 output(layout,route,same,shape,valid,O,Error,body,mode,book) 90 def 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: 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 93 def 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 95 def DespawnLifecycle(~S:Data,~WC:Type,~C:Type,~R:Type,~H:Type,~B:Type) -> Type: 96 B -> B & Life.Next 97 def 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) 99 def 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) 101 def 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: 102 removed(layout,route,same,valid,book) 103 def 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: 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) 105 def 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: 106 despawned(book) 107 def 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: 108 lifecycle(Life.Ops(~S,~(Layout.EmptyLayout{}),~(Notice.Despawned{})),despawn_lifecycle_selection(~S,~WC,~C,~R,~H,~B),book) 109 110 def 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) 112 def 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) 114 def 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 -> @-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. 117 def 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 -> @-request:(Permit -> F(W.Reservation)) -> @-H:Type -> @-B:Type -> @-builder:Builder(~S,~WC,~C,~R,~Permit,~F,~H,~B) -> B -> B & Ops(Permit,F,H) 119 def 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,~request:Permit -> F(W.Reservation),~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 122 def accumulate(-S:Data,-C:Type,-R:Type,-Ops:Type -> Type,book:Book,value:D.Declaration) -> Book & Ops(State.Scope): 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) 125 def 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,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 128 def 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,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 131 def record_resource(book:Book,entry:Resources.Entry) -> Book: 132 match book: 133 case Book{access,queries,resources,supported}:Book{access,queries,entry <> resources,supported} 134 def 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)} 137 def resource_read_recorded(-S:Data,-C:Type,-R:Type,-layout:Layout.Layout,+route:Layout.Route,book:Book,result:String & A.ResourceRead,Layout.view(layout,route)>) -> Book & A.ResourceRead,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) 140 def 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,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 143 def 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,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 146 def 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,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{}) 148 def 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,~payload:{Layout.payload(full,route) == RelationStore.Store : Type},~view:{Layout.view(full,route) == RelationStore.View : 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>: 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{}}]}) 150 def 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,~payload:{Layout.payload(full,route) == RelationStore.Store : Type},~view:{Layout.view(full,route) == RelationStore.View : Data},~protected:{Layout.policy(full,route) == Policy.ProtectedRelation{S,descriptor} : Policy.Policy},~local:{R == Layout.resources(~S,full) : Type},book:Book) -> Book & FailureAccess.Read>: 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)) 152 def resource_read_provision(~S:Data,~C:Type,~R:Type,~Ops:Type -> Type,~selection:ResourceReadSelection(~S,~C,~R,~State.Scope,~Book,~Ops),book:Book) -> Book & Ops(State.Scope): 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) 154 def 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,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{}) 156 def resource_write_provision(~S:Data,~C:Type,~R:Type,~Ops:Type -> Type,~selection:ResourceWriteSelection(~S,~C,~R,~State.Scope,~Book,~Ops),book:Book) -> Book & Ops(State.Scope): 157 selection(resource_write_build(~S,~C,~R),resource_write_unsupported(~S,~C,~R),book) 158 def 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,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 161 def 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,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 164 def sequential_output_query_build(~S:Data,~C:Type,~R:Type,~F:Type -> Type,~effects:E.Effects,~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,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 167 def 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{} 171 def 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)} 174 def 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{}} 178 def 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)) 186 def 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): 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,kind)) 188 def 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 -> Layout.view(full,route) -> Layout.payload(full,route) -> O -> Layout.payload(full,route) & (O & Maybe<&2,E>),book:Book) -> Book & Q.GeneralOutputWriter,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{}) 190 def sequential_general_unsupported(~S:Data,~WC:Type,~C:Type,~R:Type,~F:Type -> Type,~effects:E.Effects,~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,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 & (O & Q.Report)),effects,(scope,(output,Q.LayoutRefused{})))}) 192 def query_provision(~S:Data,~WC:Type,~C:Type,~R:Type,~F:Type -> Type,~effects:E.Effects,~Ops:Type -> Type,~selection:QuerySelection(~S,~WC,~C,~R,~F,~State.Scope,~Book,~Ops),book:Book) -> Book & Ops(State.Scope): 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) 194 def 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,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)) 196 def despawn_lifecycle_build(~S:Data,~WC:Type,~C:Type,~R:Type,book:Book) -> Book & Life.Next,Layout.EmptyLayout{},Notice.Despawned{}>: 197 accumulate(S,C,R,Life.Ops(~S,~(Layout.EmptyLayout{}),~(Notice.Despawned{})),book,Life.despawned(~S,~C,~R)) 198 def lifecycle_provision(~S:Data,~WC:Type,~C:Type,~R:Type,~Ops:Type -> Type,~selection:LifecycleSelection(~S,~WC,~C,~R,~State.Scope,~Book,~Ops),book:Book) -> Book & Ops(State.Scope): 199 selection(removed_lifecycle_build(~S,~WC,~C,~R),despawn_lifecycle_build(~S,~WC,~C,~R),book) 200 def 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),~State.Scope,~Book,~Ops),book:Book) -> Book & Ops(Permit,StateEffect.Transition(~State.Invocation),State.Scope): 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),~StateEffect.dictionary(~State.Invocation)),lifecycle_provision(~S,~WC,~C,~R),book) 202 def compilation_checked(~S:Data,~WC:Type,~C:Type,~R:Type,~Ops:Data -> (Type -> Type) -> Type -> Type,caps:Ops(Effect.Granted,StateEffect.Transition(~State.Invocation),State.Scope),access:List<&2,D.Access>,recipes:List<&2,Recipe.Entry>,resources:List<&2,Resources.Entry>,supported:Bool) -> D.Compilation: 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}} 206 def compiled(~S:Data,~WC:Type,~C:Type,~R:Type,~Ops:Data -> (Type -> Type) -> Type -> Type,result:Book & Ops(Effect.Granted,StateEffect.Transition(~State.Invocation),State.Scope)) -> D.Compilation: 207 match result: 208 case (Book{access,recipes,resources,supported},caps):compilation_checked(~S,~WC,~C,~R,~Ops,caps,access,recipes,resources,supported) 209 def 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: 210 compiled(~S,~WC,~C,~R,~Ops,program(Effect.Granted,Effect.Granted{},StateEffect.Transition(~State.Invocation),StateEffect.dictionary(~State.Invocation),State.request(~S),State.Scope,Book,provision(~S,~WC,~C,~R,~Effect.Granted),Book{[],[],[],True{}})) 211 212 def compile(~S:Data,~WC:Type,~C:Type,~R:Type,~Ops:Data -> (Type -> Type) -> Type -> Type,~program:Program(~S,~WC,~C,~R,~Ops)) -> D.Compilation: 213 compile_framework(~S,~WC,~C,~R,~Ops,~framework_program(~S,~WC,~C,~R,~Ops,~program)) 214 def 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) 216 def 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. 220 def 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) 222 def 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 -> Layout.view(full,route) -> Layout.payload(full,route) -> O -> Layout.payload(full,route) & (O & Maybe<&2,E>)) -> Q.GeneralOutputWriter,Layout.payload(full,route),Layout.view(full,route),O,E> 224 def 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,O,Error> 226 227 def 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 229 def 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 231 def 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): 232 ordinary(full,route,same,valid,local,kind,bound,presence,predicate) 233 def 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 -> 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,Layout.payload(full,route),Layout.view(full,route),O,E>: 234 output(full,route,same,valid,local,bound,presence,predicate,O,E,body) 235 def 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): 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),ordinary_provider_selection(~S,~WC,~C,~R,~F,~full,~route,~same,~valid,~local,~kind,~bound,~presence,~predicate))) 237 def 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 -> Layout.view(full,route) -> Layout.payload(full,route) -> O -> Layout.payload(full,route) & (O & Maybe<&2,E>),book:Book) -> Book & Q.GeneralOutputWriter,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,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))) 239 def 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,O,Error>: 240 sequential(Permit,full,route,same,valid,local,bound,presence,predicate,O,Error,body) 241 242 def 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,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,O,Error>,sequential_provider_selection(~S,~WC,~C,~R,~F,~Permit,~full,~route,~same,~valid,~local,~bound,~presence,~predicate,~O,~Error,~body))(mode)) 244 def query_provision_with(~S:Data,~WC:Type,~C:Type,~R:Type,~F:Type -> Type,~effects:E.Effects,~provider:GeneralProvider(~S,~WC,~C,~R,~F),~Ops:Type -> Type,~selection:QuerySelection(~S,~WC,~C,~R,~F,~State.Scope,~Book,~Ops),book:Book) -> Book & Ops(State.Scope): 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) 246 def provision_with_general(~S:Data,~WC:Type,~C:Type,~R:Type,~Permit:Data,~provider:GeneralProvider(~S,~WC,~C,~R,~StateEffect.Transition(~State.Invocation)),~Ops:Data -> (Type -> Type) -> Type -> Type,~selection:Selection(~S,~WC,~C,~R,~Permit,~StateEffect.Transition(~State.Invocation),~State.Scope,~Book,~Ops),book:Book) -> Book & Ops(Permit,StateEffect.Transition(~State.Invocation),State.Scope): 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),~StateEffect.dictionary(~State.Invocation),~provider),lifecycle_provision(~S,~WC,~C,~R),book) 248 def compile_framework_with_general(~S:Data,~WC:Type,~C:Type,~R:Type,~provider:GeneralProvider(~S,~WC,~C,~R,~StateEffect.Transition(~State.Invocation)),~Ops:Data -> (Type -> Type) -> Type -> Type,~program:FrameworkProgram(~S,~WC,~C,~R,~Ops)) -> D.Compilation: 249 compiled(~S,~WC,~C,~R,~Ops,program(Effect.Granted,Effect.Granted{},StateEffect.Transition(~State.Invocation),StateEffect.dictionary(~State.Invocation),State.request(~S),State.Scope,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 253 def compile_with_general(~S:Data,~WC:Type,~C:Type,~R:Type,~provider:GeneralProvider(~S,~WC,~C,~R,~StateEffect.Transition(~State.Invocation)),~Ops:Data -> (Type -> Type) -> Type -> Type,~program:Program(~S,~WC,~C,~R,~Ops)) -> D.Compilation: 254 compile_framework_with_general(~S,~WC,~C,~R,~provider,~Ops,~framework_program(~S,~WC,~C,~R,~Ops,~program)) 255 def 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,Layout.view(full,route)> 257 def 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,Layout.payload(full,route),Layout.view(full,route)> 259 def 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: 260 general(full,route,valid,local,book) 261 def 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: 262 resource(ResourceAccess.Reads(~Layout.view(full,route)),general_resource_read_selection(~S,~C,~R,~H,~B,~full,~route,~valid,~local),book) 263 def 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: 264 general(full,route,valid,local,book) 265 def 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: 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) 267 def 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,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)) 269 def 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,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)) 271 def 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,~Book,~Ops),book:Book) -> Book & Ops(State.Scope): 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) 273 def 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,~Book,~Ops),book:Book) -> Book & Ops(State.Scope): 274 selection(resource_write_build(~S,~C,~R),resource_write_with(~S,~C,~R,~provider),book) 275 def provision_with_interpreters(~S:Data,~WC:Type,~C:Type,~R:Type,~Permit:Data,~queryProvider:GeneralProvider(~S,~WC,~C,~R,~StateEffect.Transition(~State.Invocation)),~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),~State.Scope,~Book,~Ops),book:Book) -> Book & Ops(Permit,StateEffect.Transition(~State.Invocation),State.Scope): 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),~StateEffect.dictionary(~State.Invocation),~queryProvider),lifecycle_provision(~S,~WC,~C,~R),book) 277 def compile_framework_with_interpreters(~S:Data,~WC:Type,~C:Type,~R:Type,~queryProvider:GeneralProvider(~S,~WC,~C,~R,~StateEffect.Transition(~State.Invocation)),~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: 278 compiled(~S,~WC,~C,~R,~Ops,program(Effect.Granted,Effect.Granted{},StateEffect.Transition(~State.Invocation),StateEffect.dictionary(~State.Invocation),State.request(~S),State.Scope,Book,provision_with_interpreters(~S,~WC,~C,~R,~Effect.Granted,~queryProvider,~readProvider,~writeProvider),Book{[],[],[],True{}})) 279 280 def compile_with_interpreters(~S:Data,~WC:Type,~C:Type,~R:Type,~queryProvider:GeneralProvider(~S,~WC,~C,~R,~StateEffect.Transition(~State.Invocation)),~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: 281 compile_framework_with_interpreters(~S,~WC,~C,~R,~queryProvider,~readProvider,~writeProvider,~Ops,~framework_program(~S,~WC,~C,~R,~Ops,~program)) 282 283 def 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: 284 sequentialOutput(Permit,layout,route,same,shape,valid,O,Error,body,mode,book) 285 def 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: 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 288 def 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 -> 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: 289 generalOutput(full,route,same,valid,local,bound,presence,predicate,O,E,body,book) 290 def 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 -> 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: 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 295 def 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: 296 sequentialGeneral(Permit,full,route,same,valid,local,bound,presence,predicate,O,Error,body,mode,book) 297 298 def 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: 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)