anchor.diff:                  let fragmentFields = getAbstractionFrag fragmentInfo.Kind
   
                   // filter out already existing fields
  -                Map.merge (fun _ oldVal newVal -> oldVal @ newVal) fields fragmentFields, deferredFields'
  +                Map.merge (fun _ oldVal newVal -> deepMerge oldVal newVal) fields fragmentFields, deferredFields'
           ) (Map.empty, deferredFields)
       { info with Kind = ResolveAbstraction plannedTypeFields }, deferredFields', path
   
  
positive.code:     | ResolveAbstraction(fragmentFields) -> fragmentFields
      | _ -> failwith "Expected an Abstraction!"
  
  
  let rec private plan (ctx: PlanningContext) (stage:PlanningStage): PlanningStage =
      let info, deferredFields, path = stage
  
negative.code:                     | Some (FragmentDefinition fragment) when doesFragmentTypeApply ctx.Schema fragment parentDef ->
                          // retrieve fragment data just as it was normal selection set
                          // TODO: Check if the path is correctly defined
                          let fragmentInfo, deferredFields', path' = planSelection ctx fragment.SelectionSet (updatedInfo, deferredFields, path) visitedFragments 
                          let fragmentFields = getSelectionFrag fragmentInfo.Kind
                          // filter out already existing fields
                          deepMerge fields fragmentFields, deferredFields'
                          // List.mergeBy (fun field -> field.Identifier) fields fragmentFields, deferedFields'
                      | _ -> fields, deferredFields
              | InlineFragment fragment when doesFragmentTypeApply ctx.Schema fragment parentDef ->
                   // retrieve fragment data just as it was normal selection set
                   let fragmentInfo, deferredFields', path' = planSelection ctx fragment.SelectionSet (updatedInfo, deferredFields, path) visitedFragments
                   let fragmentFields = getSelectionFrag fragmentInfo.Kind
  
                   // filter out already existing fields
                   deepMerge fields fragmentFields, deferredFields'
              | _ -> fields, deferredFields
          ) ([],deferredFields)
      { info with Kind = SelectFields plannedFields }, deferredFields', path
  