anchor.diff:                          match d.Info.Kind with
                           | SelectFields [f] -> return! async { return [|res, List.rev (f.Identifier :> obj :: pathAcc)|] }
                           | _ -> return! async { return [|res, List.rev ((List.head path)::pathAcc)|] }
  +                    }
  +                | [String p], t ->
  +                    asyncVal { 
  +                        let resolve = asyncVal {
  +                            let! res = buildResolverTree d.Info.ReturnDef fieldCtx fieldExecuteMap t.Value
  +                            return! async { return [|res, List.rev((p :> obj)::pathAcc)|] }
  +                        }
  +                        let empty = asyncVal { return! async { return [||] } }
  +                        match tryGetFragmentField d.Info.Ast.SelectionSet t p with
  +                        | Some field -> if isDeferredField field then return! resolve else return! empty
  +                        | _ -> return! resolve
                       }
                   | ([p; String "__index"] | [p]), t ->
                       asyncVal { 
  
positive.code: open FSharp.Reflection.FSharpReflectionExtensions
  open System.Collections.Generic
  open FParsec
  
  type Error = string * obj list
  
  
negative.code:             else nullResolverError name
      | _ -> failwithf "Unexpected value of returnDef: %O" returnDef
  
  and buildObjectFields (fields: ExecutionInfo list) (objdef: ObjectDef) (ctx: ResolveFieldContext) (fieldExecuteMap: FieldExecuteMap) (name: string) (value: obj): AsyncVal<ResolverTree> =
      let rec build (acc: ResolverTree list) = function
          | info::xs ->
  