anchor.diff:  //    | Xor of Pattern * Pattern
   
       (* Extensions *)
  -    /// The empty language.
  -    | Empty
  -    /// Any character.
  -    // NOTE : This actually represents *any* character; it is not the same as the '.' pattern
  -    // in a lexer definition ('.' represents any character _except_ for '\n').
  -    | Any
  -    /// A character.
  -    | Character of char
       /// The specified Pattern is matched one (1) or more times.
       /// This is the Plus (+) operator in a regular expression.
       | OneOrMore of Pattern
  
positive.code: 
              // Return the constructed pattern.
              pattern
  
      /// Creates a pattern which matches any one character in the specified list.
      [<CompiledName("OfCharacterList")>]
      static member ofCharList list =
          CharSet.ofList list
          |> CharacterSet
  
      /// <summary>Creates a pattern which matches any one character in the range
      /// specified by [<paramref name="lower"/>, <paramref name="upper"/>].</summary>
      [<CompiledName("OfCharacterRange")>]
      static member ofCharRange lower upper =
          CharSet.ofRange lower upper
          |> CharacterSet
  
      /// Returns a Pattern created by concatenating the Patterns in the specified list.
      [<CompiledName("ConcatenateList")>]
      static member concatList list =
          List.reduce (FuncConvert.FuncFromTupled Pattern.Concat) list
  
      /// Returns a Pattern created by concatenating the Patterns in the specified array.
      [<CompiledName("ConcatenateArray")>]
      static member concatArray array =
          Array.reduce (FuncConvert.FuncFromTupled Pattern.Concat) array
  
      /// Returns a Pattern created by combining the Patterns in the
      /// specified list together using the logical AND relation.
      [<CompiledName("AndList")>]
      static member andList list =
          List.reduce (FuncConvert.FuncFromTupled Pattern.And) list
  
      /// Returns a Pattern created by combining the Patterns in the
      /// specified array together using the logical AND relation.
      [<CompiledName("AndArray")>]
      static member andArray array =
          Array.reduce (FuncConvert.FuncFromTupled Pattern.And) array
  
      /// Returns a Pattern created by combining the Patterns in the
      /// specified list together using the logical OR relation.
      [<CompiledName("OrList")>]
      static member orList list =
          List.reduce (FuncConvert.FuncFromTupled Pattern.Or) list    
  
      /// Returns a Pattern created by combining the Patterns in the
      /// specified array together using the logical OR relation.
      [<CompiledName("OrArray")>]
      static member orArray array =
          Array.reduce (FuncConvert.FuncFromTupled Pattern.Or) array
  
  /// <summary>A pattern defined in some clause (case) of a lexer rule.</summary>
  /// <remarks>
  
negative.code:     /// 'm' times and at most 'n' times.
      /// This is the {} operator in a regular expression.
      | Repetition of Pattern * uint32 option * uint32 option
      /// Negation.
      | Negate of Pattern
  
      (* Macros *)
      /// Match a pattern specified by a pattern macro.
      | Macro of MacroIdentifier
  
      (* Symbols *)
      /// Any character.
      | Any
      /// A set of characters.
      | CharacterSet of CharSet
  
      (* NOTE : The following cases are special cases of CharacterSet. *)
      /// The empty language.
      | Empty
      /// A character.
      | Character of char
      /// Match a character belonging to a specific Unicode category.
      | UnicodeCategory of UnicodeCategory
  
      /// Returns a Pattern created by concatenating the Patterns in the specified list.
      [<CompiledName("ConcatenateList")>]
      static member concatList list =
          List.reduce (FuncConvert.FuncFromTupled Pattern.Concat) list
  
      /// Returns a Pattern created by concatenating the Patterns in the specified array.
      [<CompiledName("ConcatenateArray")>]
      static member concatArray array =
          Array.reduce (FuncConvert.FuncFromTupled Pattern.Concat) array
  
      /// Returns a Pattern created by combining the Patterns in the
      /// specified list together using the logical AND relation.
      [<CompiledName("AndList")>]
      static member andList list =
          List.reduce (FuncConvert.FuncFromTupled Pattern.And) list
  
      /// Returns a Pattern created by combining the Patterns in the
      /// specified array together using the logical AND relation.
      [<CompiledName("AndArray")>]
      static member andArray array =
          Array.reduce (FuncConvert.FuncFromTupled Pattern.And) array
  
      /// Returns a Pattern created by combining the Patterns in the
      /// specified list together using the logical OR relation.
      [<CompiledName("OrList")>]
      static member orList list =
          List.reduce (FuncConvert.FuncFromTupled Pattern.Or) list    
  
      /// Returns a Pattern created by combining the Patterns in the
      /// specified array together using the logical OR relation.
      [<CompiledName("OrArray")>]
      static member orArray array =
          Array.reduce (FuncConvert.FuncFromTupled Pattern.Or) array
  
      /// Creates a pattern which matches the given character.
      [<CompiledName("OfCharacter")>]
      static member ofChar c : Pattern =
          CharSet.singleton c
          |> CharacterSet
  
      /// Creates a pattern which matches any one character in the specified list.
      [<CompiledName("OfCharacterList")>]
      static member ofCharList list : Pattern =
          CharSet.ofList list
          |> CharacterSet
  
      /// <summary>Creates a pattern which matches any one character in the range
      /// specified by [<paramref name="lower"/>, <paramref name="upper"/>].</summary>
      [<CompiledName("OfCharacterRange")>]
      static member ofCharRange lower upper : Pattern=
          CharSet.ofRange lower upper
          |> CharacterSet
  
      /// Creates a Pattern which matches a string.
      [<CompiledName("LiteralString")>]
  