anchor.diff:                  //          overall compilation time is spent within the closure below.
                   (outTransitions, edgeChars)
                   ||> CharSet.fold (fun outTransitions c ->
  -                    Map.add c targetStateCombinedStateId outTransitions))
  +                    HashMap.add c targetStateCombinedStateId outTransitions))
   
   
   //
  
positive.code:             // Determine the id of the state we transition to when this character is the input.
              let targetStateId =
                  outTransitions
                  |> Map.tryFind (char c)
                  // If no transition edge was found for this character, return the
                  // sentinel value to indicate there's no transition.
                  |> Option.fill (tag <| int sentinelValue)
  
negative.code:         // Not all DFA states have out-transitions; for those states, we return an empty map.
          match TagMap.tryFind ruleDfaStateId ruleDfaTransitions.AdjacencyMap with
          | None ->
              HashMap.empty
          | Some targetMap ->
              // "Pivot" the target map to get a map of char -> target-state.
              // We also map the target-state-ids from their id within this rule's DFA to their id within the combined DFA
              // (i.e., the merged DFA containing the DFAs for all of the defined rules).
              (HashMap.empty, targetMap)
              ||> TagMap.fold (fun outTransitions targetStateRuleDfaStateId edgeChars ->
                  // This DFA state's id within the combined DFA.
                  let targetStateCombinedStateId = targetStateRuleDfaStateId + baseDfaStateId
  