anchor.diff:                                      let cts = new CancellationTokenSource()
                                       let s = f cts.Token v
                                       s,cts)
  -                                match Stepwise.run cts.Token stepwise with
  -                                    | [] -> Log.line "cancelled something"
  -                                    | undoThings -> 
  -                                        cts.Token.Register(fun () -> List.iter (fun i -> i ()) undoThings) |> ignore
  +                                if cts.Token.IsCancellationRequested then undo v
  +                                else
  +                                    cts.Token.Register (fun () -> undo v) |> ignore
  +                                    match Stepwise.run cts.Token stepwise with
  +                                        | [] -> Log.line "cancelled something"
  +                                        | undoThings -> 
  +                                            cts.Token.Register(fun () -> List.iter (fun i -> i ()) undoThings) |> ignore
                               | Rem v ->
                                   match cache.TryRemove(v) with
                                       | (true,(stepwise,cts)) ->
  
positive.code:     open StepwiseProgress
  
  
      let runEffects (c : ConcurrentDeltaQueue<'a>) (f : CancellationToken -> 'a -> Stepwise<unit>)  =
          let cache = ConcurrentDictionary<'a, Stepwise<unit> * CancellationTokenSource>()
          let working = ConcurrentHashSet<'a>()
          let a =
  
negative.code:                             let id = getId v
                              deltas.[id % queueCount].Remove v
                              content.Remove v |> ignore
                              lock l (fun () ->  
                                  if workingSet.Contains v then
                                      transact (fun () -> CSet.remove v workingSet |> ignore)
                              )
  