anchor.diff:      new (buffered, ecs) = SystemCorrelated (typeof<'c>.Name, buffered, ecs)
   
       member this.Components with get () = components
  -    member this.WithComponentsBuffered fn = lock componentsBuffered (fun () -> fn componentsBuffered)
  +    member this.WithComponentsBuffered (fn : 'c ArrayRef -> unit) = lock componentsBuffered (fun () -> fn componentsBuffered)
  +    member this.WithComponentsBufferedEffect (fn : 'c ArrayRef -> 'w -> 'w) world = lock componentsBuffered (fun () -> fn componentsBuffered world)
  +
       member this.Junctions with get () = junctions
  -    member this.WithJunctionsBuffered fn = lock junctionsBuffered (fun () -> fn junctionsBuffered)
  +    member this.WithJunctionsBuffered (fn : 'c ArrayRef -> unit) = lock junctionsBuffered (fun () -> fn junctionsBuffered)
  +    member this.WithJunctionsBufferedEffect (fn : 'c ArrayRef -> 'w -> 'w) world = lock junctionsBuffered (fun () -> fn junctionsBuffered world)
   
       member internal this.Compact ecs =
   
  
positive.code:     new (buffered, ecs) = SystemUncorrelated (typeof<'c>.Name, buffered, ecs)
  
      member this.Components with get () = components
      member this.WithComponentsBuffered fn = lock componentsBuffered (fun () -> fn componentsBuffered)
  
      member this.IndexUncorrelated index =
          if index >= freeIndex then raise (ArgumentOutOfRangeException "index")
  
negative.code:             | ArrayObjsBuffered buffered -> buffered.ArrayObjsUnbuffered |> Seq.cast<'c ArrayRef> |> Seq.toArray
          | (false, _) -> [||]
  
      member this.WithComponentArraysBufferedEffect<'c when 'c : struct and 'c :> 'c Component> fn (world : 'w) =
          let componentName = typeof<'c>.Name
          match arrayObjss.TryGetValue componentName with
          | (true, arrayObjs) ->
              match arrayObjs with
              | ArrayObjs unbuffered ->
                  let arefs = unbuffered |> Seq.cast<'c ArrayRef> |> Seq.toArray
                  fn arefs world
              | ArrayObjsBuffered buffered ->
                  lock arrayObjs $ fun () ->
                      let arefsBuffered = buffered.ArrayObjsBuffered |> Seq.cast<'c ArrayRef> |> Seq.toArray
                      fn arefsBuffered world
          | (false, _) -> world
  
      member this.WithComponentArraysBuffered<'c when 'c : struct and 'c :> 'c Component> fn =
          this.WithComponentArraysBufferedEffect<'c> (fun arefsBuffered world -> fn arefsBuffered; world)
  
      member this.BufferComponentArrays<'c when 'c : struct and 'c :> 'c Component> () =
          let componentName = typeof<'c>.Name
  