anchor.diff:          comment
       ]
   
  -// Parses ignored tokens in the stream, requiring at least one.
  -let ignored1 = skipMany1 ignoredToken
   // Parses ignored tokens in the stream, if any.
   let ignored = skipMany ignoredToken
   
  +(**
  +
  +We'll frequently be allowing ignored tokens in between other parsers,
  +so let's define an inline operator to make this easier.
  +
  +*)
  +
  +/// Chain `parser` onto `pipe` with ignored tokens allowed to precede it.
   let inline (-..-) pipe parser = pipe -- ignored -- parser
   
   (**
  
positive.code:     -..- +.optionalMany directives
      -%> fun name dirs ->
          { FragmentName = name; Directives = dirs }
  
  type TypeName = string
  
  
negative.code:     %% '(' -..- +.(qty.[1..] /. ignored * withSource argument) -- ')'
      -%> auto
  
  (**
  
  The
  [spec on directives](https://facebook.github.io/graphql/#sec-Language.Directives)
  explains that they can be used to describe additional information for fields, fragments, and operations.
  
  A directive looks like this:
      @dirName
  Or, with arguments:
      @dirName(arg1: value1, arg2: value2)
  
  *)
  type Directive =
      {
          DirectiveName : string
          Arguments : Argument ListWithSource
      }
  
  /// Runs the given list parser, which parses a list of one or more elements,
  /// or returns an empty list. This is useful when a list is optional but must
  /// contain at least one item if it is present, which is common in GraphQL.
  let optionalMany parser =
      %[
          parser
          preturn (new ResizeArray<_>())
      ]
  
  /// Parses a list of 0 or more directives.
  let directives =
      let directive =
          %% '@' -- +.name
  