anchor.diff:          /// If the field is inside a selection of a fragment definition, returns the fragment type containing the field.
           /// Otherwise, return the parent type in the schema definition.
           member x.FragmentOrParentType = x.FragmentType |> Option.defaultValue x.ParentType
  -        /// Gets the selection set that does not make cyclic references to a specific Fragment.
  -        member x.NonCyclicSelectionSet = x.SelectionSet |> List.choose (function SelectionField x -> Some x | _ -> None)
  -
  -    and SelectionInfoKind =
  -        | SelectionField of SelectionInfo
  -        | CyclicReferenceToFragment of fragmentName : string
   
       /// Contains information about an operation definition in the document, with related GraphQL schema type information.
       type OperationDefinitionInfo =
           { /// Returns the definition from the parsed document.
             Definition : OperationDefinition
             /// Returns the selection information about the operation, with related GraphQL schema type information.
  -          SelectionSet : SelectionInfoKind list }
  +          SelectionSet : SelectionInfo list }
           /// Returns the name of the operation definition, if it does have a name.
           member x.Name = x.Definition.Name
  -        /// Gets the selection set that does not make cyclic references to a specific Fragment.
  -        member x.NonCyclicSelectionSet = x.SelectionSet |> List.choose (function SelectionField x -> Some x | _ -> None)
   
       /// Contains information about a fragment definition in the document, with related GraphQL schema type information.
       type FragmentDefinitionInfo =
           { /// Returns the definition from the parsed document.
             Definition : FragmentDefinition
             /// Returns the selection information about the fragment, with related GraphQL schema type information.
  -          SelectionSet : SelectionInfoKind list }
  +          SelectionSet : SelectionInfo list }
           /// Returns the name of the fragment definition, if it does have a name.
           member x.Name = x.Definition.Name
  -        /// Gets the selection set that does not make cyclic references to a specific Fragment.
  -        member x.NonCyclicSelectionSet = x.SelectionSet |> List.choose (function SelectionField x -> Some x | _ -> None)
   
       /// Contains information about a definition in the document, with related GraphQL schema type information.
       type DefinitionInfo =
  
positive.code:         |> collectResults (fun def ->
              let (vars, selectionSet) =
                  match def with
                  | OperationDefinitionInfo odef -> (Some odef.Definition.VariableDefinitions, odef.NonCyclicSelectionSet)
                  | FragmentDefinitionInfo fdef -> (None, fdef.NonCyclicSelectionSet)
              selectionSet |> collectResults (checkInputValue ctx.Schema vars))
  
      let rec private getDistinctDirectiveNamesInSelection (path : Path) (selection : Selection) : (Path * Set<string>) list =
  
negative.code:                   ParentType = ctx.ParentType
                    FragmentType = ctx.FragmentType |> Option.map (fun x -> x.TypeCondition)
                    FragmentSpreadName = ctx.FragmentType |> Option.bind (fun x -> x.Name)
                    InputValues = inputValues |> Option.defaultValue [||]
                    Path = fieldPath }
                  |> List.singleton
              | InlineFragment inlineFrag -> 
                  inlineFrag.TypeCondition
  