anchor.diff:                      printfn "Abstraction Info Keys: %A" (a |> Map.toSeq |> Seq.map fst)
                       printfn "InfoMap Keys: %A" (infoMap |> Map.toSeq |> Seq.map fst)
                       fields, {Info = { innerData with Kind = ResolveAbstraction infoMap}; Path = path'}::deferredFields'
  -                else Map.merge (fun _ oldVal newVal -> oldVal @ newVal) fields infoMap, deferredFields'
  +                else Map.merge (fun _ oldVal newVal -> deepMerge oldVal newVal) fields infoMap, deferredFields'
               | FragmentSpread spread ->
                   let spreadName = spread.Name
                   if !visitedFragments |> List.exists (fun name -> name = spreadName) 
  
positive.code:                 let fragmentFields = getAbstractionFrag fragmentInfo.Kind
  
                  // filter out already existing fields
                  Map.merge (fun _ oldVal newVal -> oldVal @ newVal) fields fragmentFields, deferredFields'
          ) (Map.empty, deferredFields)
      { info with Kind = ResolveAbstraction plannedTypeFields }, deferredFields', path
  
  
negative.code:                         let fragmentInfo, deferredFields', path' = planAbstraction ctx fragment.SelectionSet (innerData, deferredFields, path) visitedFragments fragment.TypeCondition
                          let fragmentFields = getAbstractionFrag fragmentInfo.Kind
                          // filter out already existing fields
                          Map.merge (fun _ oldVal newVal -> deepMerge oldVal newVal) fields fragmentFields, deferredFields'
                      | _ -> fields, deferredFields
              | InlineFragment fragment ->
                  // retrieve fragment data just as it was normal selection set
  