anchor.diff:                  async {
                       while true do
                           do! Async.Sleep(1000)
  -                        printfn "active = %A / desired = %A / inactiveCnt=%d / inactive=%A / rasterizeTime=%f [seconds] / count: %d" progress.activeNodeCount.Value progress.expectedNodeCount.Value inactive.Count inactiveSize (float progress.rasterizeTime.Value / float TimeSpan.TicksPerSecond) pool.Count
  +                        printfn "active = %A / desired = %A / inactiveCnt=%d / inactive=%A / rasterizeTime=%f [seconds] / count: %d / working: %d" progress.activeNodeCount.Value progress.expectedNodeCount.Value inactive.Count inactiveSize (float progress.rasterizeTime.Value / float TimeSpan.TicksPerSecond) pool.Count workingSet.Count
                           ()
                   }
   
  
positive.code:         /// the time interval for the pruning process in ms
          pruneInterval : int
  
          /// optional surface for bounding boxes of cells that are not loaded yet
          /// shader vertex must have ZZZInstancedTrafo semantic
          boundingBoxSurface : Option<IMod<ISurface>>
      }
  
  [<AutoOpen>]
  
negative.code:         member x.ReturnFrom(f : Stepwise<'a>) = f
          member x.Combine(l,r) = Stepwise.combine l r
          member x.Delay(f) = f ()
          member x.Zero() = ()
         
          
      let stepwise = StepwiseBuilder()
  