anchor.diff:              |> ImmutableDictionary.CreateRange
           itemSets.[itemSet.Index] <- {itemSet with Goto = goto}
   
  -    itemSets
  +    itemSets.ToImmutable()
   
   /// Computes the FIRST set of the `Nonterminal`s
   /// of the given sequence of `Production`s.
  
positive.code: 
  /// Creates an LALR state table.
  let createLALRStates fGetAllProductions (firstSets: FirstSets) fResolveConflict conflicts startSymbol itemSets (lookaheadTables: LookaheadItemsTable) =
      RA itemSets
      RA conflicts
  
      let emptyLookahead = LookaheadSet(firstSets.AllTerminals.Length)
      emptyLookahead.Freeze()
      let states = ImmutableArray.CreateBuilder itemSets.Count
      for itemSet in itemSets do
          let index = uint32 itemSet.Index
          // The book says we have to close the kernel under LR(1) to create the
  
negative.code: 
  /// Computes the lookahead symbols for the given `LR0ItemSet`s.
  let computeLookaheadItems fGetAllProductions (firstSets: FirstSets) itemSets =
      IA itemSets
  
      let lookaheads = LookaheadItemsTable(firstSets.AllTerminals.Length)
      let propagate =
  