1 import Base 2 # Library-owned inverse records. No arbitrary caller inverse or destructive callback. 3 # Release rows retain the displaced owners; callers decide their subsequent use. 4 type Record is Type: 5 Replaced{value:Array

} 6 Swapped{index:U32,value:P} 7 def undone(~P:Type,index:U32,result:Array

& P) -> Array

& Record

: 8 match result: 9 case (array,replacement):(array,Swapped{index,replacement}) 10 def undo(~P:Type,record:Record

,array:Array

) -> Array

& Record

: 11 match record: 12 case Replaced{old}:(old,Replaced{array}) 13 case Swapped{+index,old}:undone(~P,index,Array.swap(P,array,index,old))