anchor.diff:      -..- +.optionalMany directives
       -%> fun name dirs ->
           { FragmentName = name; Directives = dirs }
  +
  +(**
  +
  +*)
   
   type TypeName = string
   
  
positive.code:             { DirectiveName = name; Arguments = args }
      qty.[0..] /. ignored * withSource directive
  
  type FragmentName = string
  
  let fragmentName =
      name >>= fun name ->
          if name = "on" then fail "fragment name may not be `on`"
          else preturn name
  
  type FragmentSpread =
      {
  
negative.code: 
  Now that we have values, let's keep building up to full queries.
  
  An [argument](https://facebook.github.io/graphql/#sec-Language.Arguments)
  is a named value. It is found in an argument list, which looks like this:
      (arg1: value1, arg2: value2)
  Remember, however, that the commas are entirely optional, since they are ignored tokens.
  
  *)
  
  /// Represents an `argName: argValue` pair
  type Argument =
      {
          ArgumentName : string
          ArgumentValue : Value
      }
  
  /// Parses an argument list wrapped in parentheses. Per the GraphQL spec,
  /// this list must contain at least one argument.
  let arguments =
      let argument =
          %% +.name
  