1 import Base 2 import ./dependency_registration.bend as Reg 3 import ./dependency_executor.bend as Exec 4 import ./dependency_plan.bend as Plan 5 6 type Facts<-Registry:Type> is Type: 7 Facts{registry:Registry,deferred:List<&2,U32>} 8 def ordinary(~World:Type,~Owners:Type,~Error:Data,~Out:Data,~dispatch:Owners -> World -> U32 -> Owners & (World & Exec.Invocation),registry:Reg.Registry) -> Facts>: 9 Facts{registry,[]} 10 def command(~World:Type,~Owners:Type,~Error:Data,~Out:Data,~dispatch:Owners -> World -> U32 -> Owners & (World & Exec.Invocation),registry:Reg.Registry) -> Facts>: 11 match registry: 12 case Reg.Registry{owners,+nodes}:Facts{Reg.Registry{owners,nodes},Reg.ids(nodes)} 13 def paired(~World:Type,~L:Type,~R:Type,~Error:Data,~Out:Data,~leftDispatch:L -> World -> U32 -> L & (World & Exec.Invocation),~rightDispatch:R -> World -> U32 -> R & (World & Exec.Invocation),left:Facts>,right:Facts>) -> Facts,Error,Out,Reg.paired_dispatch(~World,~L,~R,~Error,~Out,~leftDispatch,~rightDispatch)>>: 14 match left right: 15 case Facts{left,ld} Facts{right,rd}:Facts{Reg.paired(~World,~L,~R,~Error,~Out,~leftDispatch,~rightDispatch,left,right),List.append(&2,U32,ld,rd)}