anchor.diff:      /// These actions are used when a production is reduced and the parser jumps to the state that represents the shifted nonterminal.
       GotoActions: Map<NonTerminal, Indexed<LALRState>>
   }
  +with
  +    override x.ToString() = string x.Index
   
   /// A context-free grammar according to which, Farkle can parse text.
   type Grammar = internal {
  
positive.code:     /// The `Nonterminal` the production is referring to.
      // Storing the map's key (the nonterminal) inside its value (this production)
      // is acceptable, because the production's head is an integral part of its definition.
      HeadSymbol: NonTerminal
      /// The `LALRSymbol`s the production is made of.
      Children: LALRSymbol ImmutableArray
  }
  
  /// An action to be taken by the LALR parser according to the given `Terminal`.
  [<RequireQualifiedAccess>]
  
negative.code:     /// A set of indexes whose corresponding groups can be nested inside this group.
      Nesting: Set<Indexed<Group>>
  }
  with
      override x.ToString() = x.Name
  
  /// A symbol that can be yielded by the DFA.
  type DFASymbol = Choice<Terminal, Noise, GroupStart, GroupEnd>
  
  /// An edge of a DFA graph, that matches a character to the next DFA state using a custom data structure.
  type DFAEdge = RangeMap<char, Indexed<DFAState>>
  