anchor.diff:  
   
           Could do if digit then (float <|> int <|> datetime)
  +
  +    Example of Low Level Parser
  +    ---------------------------
  +
  +    If you look at the definitions for the argument parsers, you’ll see that in almost all cases one can
  +    decide which parser should handle the input just based on the next char in the input. Hence, we could 
  +    replace the choice‐based parser with the following low‐level implementation:
  +
  +    let error = expected "JSON value"
  +    fun (stream: CharStream<_>) ->
  +        match stream.Peek() with
  +        | '{' -> jobject stream
  +        | '[' -> jlist stream
  +        | '"' -> jstring stream
  +        | 't' when stream.Skip("true")  -> Reply(JBool true)
  +        | 'f' when stream.Skip("false") -> Reply(JBool false)
  +        | 'n' when stream.Skip("null")  -> Reply(JNull)
  +        | _ ->
  +            let stateTag = stream.StateTag
  +            let mutable reply = jnumber stream
  +            if reply.Status = Error && stateTag = stream.StateTag then
  +               reply.Error <- error
  +            reply
           
   *)
   
  
positive.code: let pmult_string : Parser<_> = 
      between ``"""`` ``"""`` (manyChars anyChar)
  
  let pString_toml : Parser<_> = psingle_string <|> pmult_string
  
  let pBool_toml : Parser<_> = 
      (pstring "false" >>% false) <|> (pstring "true" >>% true)
  
  
  let pint64_toml : Parser<_> = 
      followedByL (satisfy ((<>)'0')) "TOML ints cannot begin with leading 0s"
  
negative.code:     pITbl
  
  
  (*  Toplevel Parsers  *)
  
  
  let toml_value : Parser<_> = 
      choice [toml_simval; toml_array; toml_inlineTable]
  
  
  let toml_item : Parser<item> =
      toml_key .>>. (skipEqs >>. toml_value)
  
  
  
  
  (*
      TODO - build low level choice parser for TOML?
  
      Top Level
      ---------
          - Table Array   : starts with `[[`
  