anchor.diff:                          let! res = buildResolverTree d.Info.ReturnDef fieldCtx fieldExecuteMap t.Value
                           return! async { return [|res, List.rev(p::pathAcc)|] }
                       }
  -                | [_; String "__index";_; String "__index"], _ ->
  -                    raise <| GraphQLException("Nested defer directives are not supported yet.")
  +                | [head'; String "__index"; head; String "__index"], ResolverObjectNode n ->
  +                    asyncVal { 
  +                        let p = [head'; "__index" :> obj; head; "__index" :> obj]
  +                        let next = n.Children |> Array.tryFind(fun c' -> c'.Name = head.ToString())
  +                        let! res =
  +                            match next with
  +                            | Some next' -> traversePath d fieldCtx p (AsyncVal.wrap next') ((List.head p)::pathAcc)
  +                            | None -> AsyncVal.empty
  +                        return res
  +                    }
                   | p, ResolverObjectNode n ->
                       asyncVal {
                           let head = p |> List.head
  
positive.code:                 | _ ,_ -> raise <| GraphQLException("Path terminated unexpectedly!")
              return res
          }
      let deferredResults =
          if ctx.ExecutionPlan.DeferredFields.Length = 0
          then None
  
negative.code:             resultTrees
              |> Array.map(AsyncVal.bind(fun tree ->
                  ctx.ExecutionPlan.DeferredFields
                  |> List.filter (fun d -> (List.head d.Path) = tree.Name)
                  |> List.toArray
                  |> Array.map(deferredResult [] tree)
                  |> AsyncVal.collectParallel
                  |> AsyncVal.map (Array.fold Array.append Array.empty)))
              |> AsyncVal.collectParallel
  