def run_handles
bendvy-ecs-core@0.1.0.4 · recognized_system.bend:29
import bendvy-ecs-core@0.1.0.4/recognized_system.bend as RecognizedSystem
import Base
import bendvy-ecs-core@0.1.0.4/recognized_query_declaration.bend as N
import bendvy-ecs-core@0.1.0.4/internal/compact_operational_frame.bend as F
import bendvy-ecs-core@0.1.0.4/compose.bend as Q
import bendvy-ecs-core@0.1.0.4/transaction.bend as T
import bendvy-ecs-core@0.1.0.4/world.bend as W
29def run_handles(~S:Data,~Store:Type,~R:Type,~E:Data,~Ops:Type -> Type,~A:Data,~U:Data,~Out:Data,~query:N.Declaration<S,Store,R,E,Ops>,~body:@-H:Type -> @-caps:Ops(H) -> A -> H -> H & (T.Outcome<U> & Out),handles:List<&2,W.Handle<S>>,+args:A,values:List<&2,Out>,observed:F.Frame<S,Store,R,E> & Q.RowResult<U,Out>) -> F.Frame<S,Store,R,E> & (T.Outcome<Q.Error<U>> & List<&2,Out>):
30 match handles observed:
31 case _ Tuple{frame,Q.Failed{error}}:(frame,(T.Failure{error},List.reverse(&2,Out,values)))
32 case Nil{} Tuple{frame,Q.Skipped{}}:(frame,(T.Success{},List.reverse(&2,Out,values)))
33 case Nil{} Tuple{frame,Q.Passed{value}}:(frame,(T.Success{},List.reverse(&2,Out,value <> values)))
34 case Con{handle,rest} Tuple{frame,Q.Skipped{}}:run_handles(~S,~Store,~R,~E,~Ops,~A,~U,~Out,~query,~body,rest,args,values,selected(~S,~Store,~R,~E,~Ops,~A,~U,~Out,~query,~body,args,N.selector(~S,~Store,~R,~E,~Ops,query)(target(~S,~Store,~R,~E,handle,frame))))
35 case Con{handle,rest} Tuple{frame,Q.Passed{value}}:run_handles(~S,~Store,~R,~E,~Ops,~A,~U,~Out,~query,~body,rest,args,value <> values,selected(~S,~Store,~R,~E,~Ops,~A,~U,~Out,~query,~body,args,N.selector(~S,~Store,~R,~E,~Ops,query)(target(~S,~Store,~R,~E,handle,frame))))