anchor.diff:          Seq.map (fun (system : KeyValuePair<string, 'w System>) -> (system.Key, system.Value.Update ecs)) |>
           dictPlus
   
  -    let postUpdate ecs =
  -        ecs.Systems |>
  -        Seq.map (fun (system : KeyValuePair<string, 'w System>) -> (system.Key, system.Value.PostUpdate ecs)) |>
  -        dictPlus
  -
  -    let actualize ecs =
  -        ecs.Systems |>
  -        Seq.map (fun (system : KeyValuePair<string, 'w System>) -> (system.Key, system.Value.Actualize ecs)) |>
  -        dictPlus
  -
       let addSystem systemName system ecs =
           ecs.Systems.Add (systemName, system)
   
  
positive.code:         if not found then raise (InvalidOperationException "entityId")
          &components.[index]
  
      member this.AddComponent entityId comp =
          if not (correlations.ContainsKey entityId) then
              if freeList.Count = 0 then
                  if freeIndex < components.Length - 1 then
                      components.[freeIndex] <- comp
                      freeIndex <- inc freeIndex
                  else
                      let arr = Array.zeroCreate (components.Length * 2)
                      components.CopyTo (arr, 0)
                      components <- arr
                      components.[freeIndex] <- comp
                      freeIndex <- inc freeIndex
                  let index = dec freeIndex
                  correlations.Add (entityId, index)
              else components.[freeList.Dequeue ()] <- comp
              true
          else false
  
      member this.RemoveComponent entityId =
          match correlations.TryGetValue entityId with
          | (true, index) ->
              if index <> freeIndex then
                  components.[index].Occupied <- false
                  freeList.Enqueue index
              else freeIndex <- dec freeIndex
              true
          | (false, _) -> false
  
  and [<NoEquality; NoComparison>] ComponentSource =
      | ComponentUncorrelated of string * int
      | ComponentCorrelated of string * Guid
      | ComponentSimulant of Simulant
  
  and SystemMapper =
      interface end
  
  and [<NoEquality; NoComparison>] SystemMapper<'i, 'd, 'w when 'i :> Component and 'd :> Component> =
      { SourcesToIntersection : ComponentSource array -> 'i
        IntersectionToDestination : 'i -> 'w -> 'd
        SystemSourceNames : string array
        SystemIntersectionName : string
        SystemDestinationName : string }
      interface SystemMapper
  
  and [<NoEquality; NoComparison>] SystemMappers =
    { Mappers : SystemMapper array }
  
  /// NOTE: Uncorrelated systems can update in parallel.
  and [<NoEquality; NoComparison>] 'w Ecs =
  
negative.code: 
      member this.RemoveComponent index =
          if index <> freeIndex then
              components.[index].RefCount <- dec components.[index].RefCount
              freeList.Enqueue index
          else freeIndex <- dec freeIndex
  
  