def rollback
bendvy-ecs-core@0.1.0.4 · decode_owned_journal.bend:32
import bendvy-ecs-core@0.1.0.4/decode_owned_journal.bend as DecodeOwnedJournal
import Base
import bendvy-ecs-core@0.1.0.4/transaction.bend as T
32def rollback(~World:Type,~P:Type,~Q:Type,receipts:List<Receipt<World,P,Q>>,undo:List<(World -> World)>,count:Nat,world:World,owners:List<P>,pending:List<Pending<Q>>) -> Returned<World,P,Q>:
33 match receipts:
34 case []:Returned{T.rollback(~World,undo,world),List.reverse(&1,P,owners),List.reverse(&1,Pending<Q>,pending)}
35 case Receipt{+position,inverse} <> rest:unwound(~World,~P,~Q,inverse,(undo => world => owners => pending => rollback(~World,~P,~Q,rest,undo,position,world,owners,pending)),owners,pending,stepped(~World,Nat.sub(count,position),world,undo))