optimized_compose.bend

bendvy-ecs-core@0.1.0.1 · 18 lines · 0 definitions

1import Base
2import bendvy-ecs-core@0.1.0.1/change_tick.bend as Tick
3import world.bend as W
4import compose.bend as Q
5import transaction.bend as T
6
7# Trusted schema preparation/recovery declarations preserve arbitrary Store/Ops.
8# The registered runner remains indexed by this closed provider selection.
9def map_store(~S:Data,~Store:Type,~R:Type,~E:Data,~map:Store -> Store,world:W.World<S,Store,R,E>) -> W.World<S,Store,R,E>:
10  match world:
11    case W.World{namespace,allocator,store,resource,events,pending,registrations,nextSystemId,clock}: W.World{namespace,allocator,map(store),resource,events,pending,registrations,nextSystemId,clock}
12def recovered(~S:Data,~Store:Type,~R:Type,~E:Data,~U:Data,~Out:Data,~recover:Store -> Store,result:Q.Executed<W.World<S,Store,R,E>,Q.Error<U>,Out>) -> Q.Executed<W.World<S,Store,R,E>,Q.Error<U>,Out>:
13  match result:
14    case Q.Executed{world,outcome,values}: Q.Executed{map_store(~S,~Store,~R,~E,~recover,world),outcome,values}
15def each(~S:Data,~Store:Type,~R:Type,~E:Data,~Ops:Type -> Type,~A:Data,~U:Data,~Out:Data,~plan:Q.Plan<S,Store,R,E,Ops>,~body:@-H:Type -> @-caps:Ops(H) -> A -> H -> H & (T.Outcome<U> & Out),~prepare:Store -> Store,~recover:Store -> Store,args:A,world:W.World<S,Store,R,E>) -> Q.Executed<W.World<S,Store,R,E>,Q.Error<U>,Out>:
16  recovered(~S,~Store,~R,~E,~U,~Out,~recover,Q.each(~S,~Store,~R,~E,~Ops,~A,~U,~Out,~plan,~body,args,map_store(~S,~Store,~R,~E,~prepare,world)))
17def each_since(~S:Data,~Store:Type,~R:Type,~E:Data,~Ops:Type -> Type,~A:Data,~U:Data,~Out:Data,~plan:Q.Plan<S,Store,R,E,Ops>,~body:@-H:Type -> @-caps:Ops(H) -> A -> H -> H & (T.Outcome<U> & Out),~prepare:Store -> Store,~recover:Store -> Store,args:A,world:W.World<S,Store,R,E>,cursor:Maybe<&2,Tick.Tick>) -> Q.Executed<W.World<S,Store,R,E>,Q.Error<U>,Out>:
18  recovered(~S,~Store,~R,~E,~U,~Out,~recover,Q.each_since(~S,~Store,~R,~E,~Ops,~A,~U,~Out,~plan,~body,args,map_store(~S,~Store,~R,~E,~prepare,world),cursor))