anchor.diff:          currentTimestampLiteral
       ]
   
  +(**
  +
  +Next we're going to parse expressions -- the kind of expressions that can appear in a "where" clause, for example.
  +However, SQL expressions can be pretty complicated, so we have a lot of miscellaneous pieces to define
  +before we can get to something recognizable.
  +
  +One of these pieces is the definition of a [type name](https://www.sqlite.org/syntax/type-name.html).
  +These are most frequently seen in `CREATE TABLE` statements, but also appear in expressions of the form
  +`CAST (expr as type-name)`.
  +
  +Since SQLite cares little about types and cares very much about compatibility, it is very liberal about type names.
  +They can even have numeric bounds to look like types from other databases, even though SQLite ignores these completely.
  +
  +*)
  +
   let typeBounds =
       %% '('
       -- ws
  
positive.code: 
  (**
  
  Next are string literals, which are very similar to quoted identifiers.
  
  *)
  
  
negative.code: 
  (**
  
  We could liberally parse integer and float literals using `pfloat` and `pint64`.
  
  However, to strictly match the rules laid out
  [here](https://www.sqlite.org/syntaxdiagrams.html#literal-value),
  