anchor.diff:          // NOTE : The ordering only matters when two or more clauses overlap,
           // because then the ordering is used to decide which action to execute.
           rule.Clauses
  -        |> List.rev
  -        |> List.toArray
  +        |> List.revIntoArray
   
       // Extract any clauses which match the end-of-file pattern;
       // these are handled separately from the other patterns.
  
positive.code:             // transition edges to it from the initial state.
              if CharSet.isEmpty wildcardChars then
                  // TODO : Emit a warning to let the user know this pattern will never be matched.
                  Debug.WriteLine "Warning: Wildcard pattern in rule will never be matched."
  
                  compiledPatternDfa
              else
  
negative.code:     choice {
      // Validate and simplify the patterns of the rule clauses.
      let! ruleClauseRegexes =
          // Put all of the "results" in one array and all of the "errors" in another.
          let results, errors =
              patterns
              |> Array.mapPartition (fun (originalRuleClauseIndex, pattern) ->
                  validateAndSimplifyPattern pattern (macroEnv, badMacros, options)
                  |> Choice.map (fun pattern ->
                      originalRuleClauseIndex, pattern))
  
          // If there are any errors return them; otherwise, return the results.
          if Array.isEmpty errors then
              Choice1Of2 results
          else
              // Flatten the error array.
              Choice2Of2 <| Array.concat errors
  
      /// The DFA compiled from the rule clause patterns.
      let compiledPatternDfa =
  