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))