anchor.diff:          popped
   
       member this.IndexHierarchical entityId =
  -        system.IndexCorrelated entityId
  +        this.IndexCorrelated entityId
   
       member this.IndexHierarchicalJunctioned fieldPath entityId =
  -        system.IndexJunctioned fieldPath entityId
  +        this.IndexJunctioned fieldPath entityId
   
       member this.RegisterHierarchical ordered (parentIdOpt : Guid option) comp entityId =
  -        let cref = system.RegisterCorrelated ordered comp entityId
  +        let this' = this :> SystemCorrelated<'c, 'w>
  +        let cref = this'.RegisterCorrelated ordered comp entityId
           let node = { EntityId = entityId; ComponentRef = cref }
           let addedOpt =
               match parentIdOpt with
  
positive.code:             match this.TryIndexSystem<'c, SystemFamilial<'c, 'w>> () with
              | Some system -> system.UnregisterFamilial memberId entityId
              | _ -> failwith ("Could not find expected system '" + Unchecked.defaultof<'c>.TypeName + "'.")
  
  /// A correlated entity reference.
  /// Slow relative to normal ECS operations, but convenient for one-off uses.
  type [<NoEquality; NoComparison; Struct>] 'w EntityRef =
      { EntityId : Guid
        EntityEcs : 'w Ecs }
  
      member this.Index<'c when 'c : struct and 'c :> 'c Component> () =
          let system = this.EntityEcs.IndexSystem<'c, SystemCorrelated<'c, 'w>> ()
          let correlated = system.IndexCorrelated this.EntityId : 'c ComponentRef
          &correlated.Index
  
      member this.IndexBuffered<'c when 'c : struct and 'c :> 'c Component> () =
          let system = this.EntityEcs.IndexSystem<'c, SystemCorrelated<'c, 'w>> ()
          let correlated = system.IndexCorrelated this.EntityId : 'c ComponentRef
          correlated.IndexBuffered
  
      member this.IndexMultiplexed<'c when 'c : struct and 'c :> 'c Component> simplexName =
          let system = this.EntityEcs.IndexSystem<'c, SystemMultiplexed<'c, 'w>> ()
          let multiplexed = system.IndexMultiplexed simplexName this.EntityId : 'c Simplex
          &multiplexed.Simplex
  
      member this.IndexMultiplexedBuffered<'c when 'c : struct and 'c :> 'c Component> simplexName =
          let system = this.EntityEcs.IndexSystem<'c, SystemMultiplexed<'c, 'w>> ()
          let multiplexed = system.IndexMultiplexedBuffered simplexName this.EntityId : 'c Simplex
          multiplexed.Simplex
  
      member this.IndexHierarchical<'c when 'c : struct and 'c :> 'c Component> () =
          let system = this.EntityEcs.IndexSystem<'c, SystemHierarchical<'c, 'w>> ()
          let hierarchical = system.IndexHierarchical this.EntityId : 'c ComponentRef
          &hierarchical.Index
  
      member this.IndexHierarchicalBuffered<'c when 'c : struct and 'c :> 'c Component> () =
          let system = this.EntityEcs.IndexSystem<'c, SystemHierarchical<'c, 'w>> ()
          let hierarchical = system.IndexHierarchical this.EntityId : 'c ComponentRef
          hierarchical.IndexBuffered
  
      member this.IndexFamilial<'c when 'c : struct and 'c :> 'c Component> memberId =
          let system = this.EntityEcs.IndexSystem<'c, SystemFamilial<'c, 'w>> ()
          let familial = system.IndexFamilial memberId this.EntityId : 'c ComponentRef
          &familial.Index
  
      member this.IndexFamilialBuffered<'c when 'c : struct and 'c :> 'c Component> memberId =
          let system = this.EntityEcs.IndexSystem<'c, SystemFamilial<'c, 'w>> ()
          let familial = system.IndexFamilial memberId this.EntityId : 'c ComponentRef
          familial.IndexBuffered
  
      type 'w Ecs with
          member this.GetEntityRef entityId =
              { EntityId = entityId; EntityEcs = this }
  
  [<RequireQualifiedAccess>]
  module EcsEvents =
  
negative.code:     let mutable correlationChanges = dictPlus<Guid, string HashSet> HashIdentity.Structural []
      let emptySystemNames = hashSetPlus<string> StringComparer.Ordinal [] // the empty systems dict to elide allocation on IndexSystemNames
      let emptyCorrelation = hashSetPlus<string> StringComparer.Ordinal [] // the empty correlation to elide allocation on IndexEntitiesChanged
      let queries = Queries<'w> ()
  
      do this.RegisterSystemGeneralized systemGlobal |> ignore<'w System>
  
  