anchor.diff:          (* And *)
           // Nested And patterns should skew towards the left.
           | And (r, And (s, t)) ->
  -            return! simplify <| And (And (r, s), t)
  +            return! simplifyRec <| And (And (r, s), t)
           | And (regex1, regex2) ->
               // Simplify the two sub-regexes first.
  -            let! regex1 = simplify regex1
  -            let! regex2 = simplify regex2
  +            let! regex1 = simplifyRec regex1
  +            let! regex2 = simplifyRec regex2
   
               match regex1, regex2 with
               | Empty, _
  
positive.code: 
  open System.Diagnostics
  open ExtCore.Control.Cps
  open ExtCore.Control.Collections
  open FSharpLex.SpecializedCollections
  
  (*  Turn off warning about uppercase variable identifiers; some variables
  
negative.code: 
              // Nested Concat patterns should skew towards the right.
              | Concat (r, s), t ->
                  return! simplifyRec <| Concat (r, Concat (s, t))
  
              | Star s, Star t
                  // The equivalence here is only an approximation.
  