anchor.diff:      let VarArgsNames: string[] = [|"SUM"|]
       let VarArgsFunctionName: P<string> =
           (lmf VarArgsNames)
  -        |> Array.map (fun name -> pstring name) |> choice <!> "VarArgsFunctionName"
  +        |> Array.map (fun name -> pstring name) |> choice_opt <!> "VarArgsFunctionName"
   
       let arityNNameArr: P<string>[] = 
           [|
  
positive.code:                         (many1Satisfy (fun c -> c <> '[' && c <> ']'))
      let Workbook = (
                          (Path |>> Some)
                          <|> ((pstring "") >>% None)
                     )
                     .>>. WorkbookName
  
  
negative.code:     let RA1_3c = pipe3 AddrA1 RA1TO_2 RA1TC_1 rat_fun
      let RA1_3d = pipe3 AddrA1 RA1TO_2 RA1TC_2 rat_fun
      let RA1_3 = (* AddrA1 RTO RTC (3)*) 
                  (attempt_opt RA1_3a) <||> (attempt_opt RA1_3b) <||> (attempt_opt RA1_3c) <||> RA1_3d
  
      let RA1_4_UNION = (* AddrA1 "," R (4)*) pipe2 (AddrA1 .>> (pstring ",")) RangeA1Union (fun a1 r1 -> Range(r1.Ranges() @ [(a1, a1)]))
      let RA1_5_UNION = (* AddrA1 RTO R (5)*) pipe3 AddrA1 RTO RangeA1Union (fun a1 a2 r2 -> Range ((a1,a2) :: r2.Ranges()))
      do RangeA1UnionImpl :=   (attempt_opt RA1_5_UNION)
                          <||> (attempt_opt RA1_4_UNION)
                          <||> (attempt_opt RA1_3)
                          <||> (attempt_opt RA1_1)
                          <||> RA1_2
      do RangeA1NoUnionImpl := pipe2 AddrA1 RA1TO_2 (fun a1 a2 -> Range(a1, a2))
                          
      do RangeR1C1Impl := RangeA1Union
  
      let RangeWithUnion = (attempt_opt RangeA1Union) <!> "Union Range"
      let RangeNoUnion = (attempt_opt RangeA1NoUnion) <!> "No-Union Range"
  
      let RangeAny = ((attempt_opt RangeWithUnion) <||> RangeWithUnion) <!> "RangeAny"
  
      // Worksheet Names
      let WorksheetNameQuoted =
          let NormalChar = satisfy ((<>) '\'')
          let EscapedChar = pstring "''" |>> (fun s -> ''')
          between (pstring "'") (pstring "'")
                  (many1Chars (NormalChar <||> EscapedChar))
      let WorksheetNameUnquoted = (many1Satisfy (fun c -> isWSChar(c)))
      let WorksheetName = (WorksheetNameQuoted <||> WorksheetNameUnquoted)
      // Workbook Names (this may be too restrictive)
      let Path = many1Satisfy ((<>) '[')
      let WorkbookName = between
  