execution_retained_system.bend

bendvy-ecs-core@0.1.0.3 · 28 lines · 9 definitions

1import Base
2
3type CompiledBinding<-Compilation:Type,-Owner:Type> is Type:
4  CompiledBinding{-Held:Type,held:Held,same:{Held == Compilation & Owner : Type}}
5
6def pack(-Compilation:Type,-Owner:Type,compilation:Compilation,owner:Owner) -> CompiledBinding<Compilation,Owner>:
7  CompiledBinding{Compilation & Owner,(compilation,owner),{==}}
8def unpack(-Compilation:Type,-Owner:Type,binding:CompiledBinding<Compilation,Owner>) -> Compilation & Owner:
9  match binding:
10    case CompiledBinding{Held,held,same}:
11      %same : _
12      held
13def pack_pair(-Compilation:Type,-Owner:Type,pair:Compilation & Owner) -> CompiledBinding<Compilation,Owner>:
14  match pair:
15    case (compilation,owner):pack(Compilation,Owner,compilation,owner)
16def owner_pair(-Compilation:Type,-Owner:Type,pair:Compilation & Owner) -> Owner:
17  match pair:
18    case (_,owner):owner
19def owner(-Compilation:Type,-Owner:Type,binding:CompiledBinding<Compilation,Owner>) -> Owner:
20  owner_pair(Compilation,Owner,unpack(Compilation,Owner,binding))
21def owner_mapped(-Compilation:Type,-Owner:Type,-Out:Type,compilation:Compilation,result:Owner & Out) -> CompiledBinding<Compilation,Owner> & Out:
22  match result:
23    case (owner,out):(pack(Compilation,Owner,compilation,owner),out)
24def owner_map_unpacked(-Compilation:Type,-Owner:Type,-Out:Type,observe:Owner -> Owner & Out,pair:Compilation & Owner) -> CompiledBinding<Compilation,Owner> & Out:
25  match pair:
26    case (compilation,owner):owner_mapped(Compilation,Owner,Out,compilation,observe(owner))
27def map_owner(-Compilation:Type,-Owner:Type,-Out:Type,observe:Owner -> Owner & Out,binding:CompiledBinding<Compilation,Owner>) -> CompiledBinding<Compilation,Owner> & Out:
28  owner_map_unpacked(Compilation,Owner,Out,observe,unpack(Compilation,Owner,binding))