anchor.diff:      /// 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
  +    Head: NonTerminal
  +    /// The `Terminals`s and `NonTerminal`s, the production is made of.
  +    Handle: Choice<Terminal, NonTerminal> ImmutableArray
   }
  +with
  +    override x.ToString() =
  +        x.Handle
  +        |> Seq.map (function | Choice1Of2 x -> string x | Choice2Of2 x -> string x)
  +        |> String.concat " "
  +        |> sprintf "%O ::= %s" x.Head
   
   /// An action to be taken by the LALR parser according to the given `Terminal`.
   [<RequireQualifiedAccess>]
  
positive.code:             || Char.IsLetter name.[0]
              || String.forall (fun x -> Char.IsLetter x || x = '.' || x = '-' || x = '_') name
          then
              "'" + name + "'"
          else
              name
  
  
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>>
  