anchor.diff:                  if length > 1
                   then AstError.AsResult(sprintf "There are %i arguments with name '%s' defined in %s. Field arguments must be unique." length name fieldOrDirective, path)
                   else Success)
  -        selectionSet
  -        |> collectResults (fun selection ->
  -            let argsValid = validateArgs (sprintf "alias or field '%s'" selection.AliasOrName) selection.Path selection.Field.Arguments
  -            let directiveArgsValid = selection.Field.Directives |> collectResults (fun directive -> validateArgs (sprintf "directive '%s'" directive.Name) selection.Path directive.Arguments)
  -            let innerArgsValid = checkArgumentUniqueness selection.SelectionSet
  -            argsValid @@ directiveArgsValid @@ innerArgsValid)
  +        let argsValid = validateArgs (sprintf "alias or field '%s'" selection.AliasOrName) selection.Path selection.Field.Arguments
  +        let directiveArgsValid = selection.Field.Directives |> collectResults (fun directive -> validateArgs (sprintf "directive '%s'" directive.Name) selection.Path directive.Arguments)
  +        argsValid @@ directiveArgsValid
   
       let internal validateArgumentUniqueness (ctx : ValidationContext) =
  -        ctx.Definitions
  -        |> collectResults (fun def -> checkArgumentUniqueness def.SelectionSet)
  +        onAllSelections ctx validateArgumentUniquenessInSelection
   
       let private checkRequiredArguments (schemaInfo : SchemaInfo) (selection : SelectionInfo) =
           let inputsValid =
  
positive.code:             | TypeKind.INTERFACE | TypeKind.UNION | TypeKind.OBJECT when selectionSetLength = 0 ->
                  AstError.AsResult(sprintf "Field '%s' of '%s' type is of type kind %s, and therefore should have inner fields in its selection." selection.Field.Name selection.FragmentOrParentType.Name (fieldType.Kind.ToString()), selection.Path)
              | _ -> Success
          let validKind =
              match selection.FieldType with
              | Some fieldType -> validateByKind fieldType selection.SelectionSet.Length
              | None -> Success
          validKind
          @@ (selection.SelectionSet |> collectResults checkLeafFieldSelection)
  
      let internal validateLeafFieldSelections (ctx : ValidationContext) =
          ctx.Definitions
          |> collectResults (fun def -> def.SelectionSet |> collectResults checkLeafFieldSelection)
  
      let private checkFieldArgumentNames (schemaInfo : SchemaInfo) (selection : SelectionInfo) =
          let argumentsValid =
  
negative.code:         fragmentTypeValid @@ (selection.SelectionSet |> collectResults checkFragmentOnCompositeType)
  
      let internal validateFragmentsOnCompositeTypes (ctx : ValidationContext) =
          onAllSelections ctx checkFragmentOnCompositeType
  
      let internal validateFragmentsMustBeUsed (ctx : ValidationContext) =
          let rec getSpreadNames (acc : Set<string>) =
  