1 import Base 2 import ./ordinary_owned_event_family_reader_binding.bend as Setup 3 import ./ordinary_owned_event_binding.bend as Binding 4 import ./ordinary_owned_event.bend as Pub 5 import ./owned_event_log.bend as Log 6 import ./owned_event_key_route.bend as KeyRoute 7 import ./ordinary_event_family.bend as Family 8 import ./owner_product.bend as Product 9 import ./event_publication.bend as Publication 10 import ./ordinary_event_declaration.bend as Declaration 11 import ./owned_event_family_catalog.bend as Catalog 12 import ./event_stream.bend as Stream 13 14 # A Data event family has no affine log owner to drain. Its ordinary domain 15 # supplies the same nominal stream used by setup/readers and catalog composition. 16 def data_retain(~E:Data,unit:Unit,records:List<&2,E>) -> Unit & Unit: 17 (unit,Unit{}) 18 def data_drain(unit:Unit) -> Unit & Unit: 19 (unit,Unit{}) 20 def data_clear(~S:Data,~E:Data,stream:Stream.Stream) -> Stream.Stream: 21 match stream: 22 case Stream.Stream{domain,_,positions,nextReader,frameStart,boundary,capacity,dropped}:Stream.Stream{domain,[],positions,nextReader,frameStart,boundary,capacity,dropped} 23 def data_catalog(~S:Data,~E:Data,domain:Declaration.Domain) -> Catalog.Catalog,Unit,data_retain(~E),data_drain,data_clear(~S,~E)>: 24 Catalog.Catalog{} 25 def MixedSetup(~S:Data,~P:Type,~E:Data,~identity:Pub.Domain) -> Data: 26 Setup.Setup,Unit>,P,Unit & Unit,Publication.Publication,Family.Domains,Declaration.Domain>,Product.Owner,Stream.Stream>,Binding.left_path(~Log.Log

,~Unit,~P,~Unit,~Binding.identity_lens(~Log.Log

)),KeyRoute.inject_left(~Nat,~E,~KeyRoute.inject_leaf),KeyRoute.select_left(~Nat,~E,~KeyRoute.select_leaf),identity,Family.node_make(~Declaration.Domain,~Declaration.Domain,~Stream.Stream,~Stream.Stream,~Family.leaf_make(~S,~Nat),~Family.leaf_make(~S,~E)),Family.node_sync(~Nat,~E,~Stream.Stream,~Stream.Stream,~Family.leaf_sync(~S,~Nat),~Family.leaf_sync(~S,~E)),Family.node_frame(~Stream.Stream,~Stream.Stream,~Family.leaf_frame(~S,~Nat),~Family.leaf_frame(~S,~E)),Family.pair_retain(~Nat,~E,~Stream.Stream,~Stream.Stream,~Family.leaf_retain(~S,~Nat),~Family.leaf_retain(~S,~E)),Family.pair_inventory(~Stream.Stream,~Stream.Stream,~Family.leaf_inventory(~S,~Nat),~Family.leaf_inventory(~S,~E)),Family.left_take(~S,~Nat,~Stream.Stream,~Stream.Stream,~Family.selected_leaf(~S,~Nat)),Family.left_put(~S,~Nat,~Stream.Stream,~Stream.Stream,~Family.replaced_leaf(~S,~Nat))> 27 def with_data(~S:Data,~P:Type,~E:Data,~identity:Pub.Domain,domain:Declaration.Domain) -> MixedSetup(~S,~P,~E,~identity): 28 Setup.Setup{Binding.left(~S,~Log.Log

,~Unit,~P,~Unit,~Nat,~E,~Binding.identity_lens(~Log.Log

),~KeyRoute.inject_leaf,~KeyRoute.select_leaf,~identity,Binding.leaf(~S,~P,~identity)),Family.branch(~S,~Nat,~E,~Declaration.Domain,~Declaration.Domain,~Stream.Stream,~Stream.Stream,~Family.leaf_make(~S,~Nat),~Family.leaf_make(~S,~E),~Family.leaf_sync(~S,~Nat),~Family.leaf_sync(~S,~E),~Family.leaf_frame(~S,~Nat),~Family.leaf_frame(~S,~E),~Family.leaf_retain(~S,~Nat),~Family.leaf_retain(~S,~E),~Family.leaf_inventory(~S,~Nat),~Family.leaf_inventory(~S,~E),Family.leaf(~S,~Nat,Setup.domain(~S,~P,identity)),Family.leaf(~S,~E,domain)),Family.select_left(~S,~Nat,~Stream.Stream,~Stream.Stream,~Family.selected_leaf(~S,~Nat),~Family.replaced_leaf(~S,~Nat),Family.select_leaf(~S,~Nat))}