1 import Base 2 import ./world.bend as W 3 import ./column.bend as Col 4 import ./ordinary_declaration.bend as Identity 5 import ./ordinary_component_binding.bend as Binding 6 import ./ordinary_component_despawn.bend as Clear 7 8 # Closed trusted setup declaration; the same clear index supplies execution. 9 type Declaration<-S:Data,-Store:Type,-E:Data,-clear:Store -> W.Handle -> Store & List<&2,E>> is Data: 10 Declaration{keys:List<&2,String>} 11 def keys(~S:Data,~Store:Type,~E:Data,~clear:Store -> W.Handle -> Store & List<&2,E>,declaration:Declaration) -> List<&2,String>: 12 match declaration: 13 case Declaration{keys}:keys 14 def leaf(~S:Data,~Store:Type,~Rest:Type,~P:Type,~V:Data,~Token:Data,~take:Store -> Rest & Col.Column,~put:Rest -> Col.Column -> Store,~view:P -> P & V,~E:Data,~inject:Identity.Declaration -> W.Handle -> E,~binding:Binding.Binding) -> Declaration: 15 Declaration{[Identity.key(~S,~P,Binding.identity(~S,~Store,~Rest,~P,~V,~Token,~take,~put,~view,binding))]} 16 def product_clear(~S:Data,~Store:Type,~E:Data,~left:Store -> W.Handle -> Store & List<&2,E>,~right:Store -> W.Handle -> Store & List<&2,E>,store:Store,handle:W.Handle) -> Store & List<&2,E>: 17 Clear.product(~S,~Store,~E,~left,~right,store,handle) 18 def product(~S:Data,~Store:Type,~E:Data,~left:Store -> W.Handle -> Store & List<&2,E>,~right:Store -> W.Handle -> Store & List<&2,E>,~leftDeclaration:Declaration,~rightDeclaration:Declaration) -> Declaration: 19 Declaration{List.append(&2,String,keys(~S,~Store,~E,~left,leftDeclaration),keys(~S,~Store,~E,~right,rightDeclaration))}