anchor.diff:                            <!> "StringReference"
       let ConstantReference = getUserState >>= 
                                   fun us ->
  -                                    (attempt
  +                                    (attempt_opt
                                           (pfloat .>> pstring "%"
                                           |>> fun r -> ReferenceConstant(us, r / 100.0) :> Reference))
  -                                    <|> (pfloat |>> (fun r -> ReferenceConstant(us, r) :> Reference))
  +                                    <||> (pfloat |>> (fun r -> ReferenceConstant(us, r) :> Reference))
                               <!> "ConstantReference"
       let BooleanReference = getUserState >>=
                                fun us ->
  -                                 Array.map (fun b -> attempt (pstring b)) [| "TRUE"; "FALSE" |]
  -                                 |> choice
  +                                 Array.map (fun b -> attempt_opt (pstring b)) [| "TRUE"; "FALSE" |]
  +                                 |> choice_opt
                                    |>> fun r -> ReferenceBoolean(us, System.Boolean.Parse(r)) :> Reference
                              <!> "BooleanReference"
   
  
positive.code:                                 Address.fromA1withMode(row1, colA, rowMode, colMode, us.WorksheetName, us.WorkbookName, us.Path)
                                  ))
                      
      let AnyAddr = ((attempt AddrIndirect)
                    <|> (attempt AddrR1C1)
                    <|> AddrA1)
                    <!> "AnyAddr"
  
      // Ranges
      let RA1TO_1 = pstring ":" >>. AddrA1 .>> pstring ","
      let RA1TO_2 = pstring ":" >>. AddrA1
      let RTO = (attempt RA1TO_1) <|> RA1TO_2
  
      let RA1TC_1 = pstring "," >>. AddrA1 .>> pstring ","
      let RA1TC_2 = pstring "," >>. AddrA1
      let RTC = (attempt RA1TC_1) <|> RA1TC_2
  
      let RA1_1 = (* AddrA1 RTC (1)*) pipe2 AddrA1 RTC (fun a1 a2 -> Range([(a2,a2); (a1,a1)]))
      let RA1_2 = (* AddrA1 RTO (2)*) pipe2 AddrA1 RTO (fun a1 a2 -> Range(a1,a2))
  
negative.code:         (       
              (   // fixed arity
                  arityNNameArr |>
                      Array.mapi (fun i _ -> (attempt_opt (ArityNFunction i R))) |> choice_opt)
              <||> (// low-bounded arity
                  arityAtLeastNNameArr |>
                      // note: no "at-least-0" parser; that's just a varargs
                      Array.mapi (fun i _ -> (attempt_opt (ArityAtLeastNFunction (i + 1) R))) |> choice_opt)
              <||> (// varargs
                  VarArgsFunction R)
          ) <!> "Function"
      
  