anchor.diff:      let format =
           {
               AddTag = fun _ -> id
  -            GetEncodedFieldName = fun _ -> id
  +            GetEncodedFieldName = fun t ->
  +                let d = Dictionary()
  +                let fields =
  +                    if FST.IsRecord t then
  +                        FST.GetRecordFields(t, flags)
  +                        |> Seq.cast<System.Reflection.MemberInfo>
  +                    else
  +                        getObjectFields t
  +                        |> Seq.cast<System.Reflection.MemberInfo>
  +                for f in fields do
  +                    if not (d.ContainsKey f.Name) then
  +                        d.Add(f.Name, defaultArg (getNameAttr f) f.Name)
  +                fun n ->
  +                    match d.TryGetValue n with
  +                    | true, n -> n
  +                    | false, _ -> n
               GetUnionTag = fun t ->
                   match getDiscriminatorName t with
                   | None -> defaultGetUnionTag t
  
positive.code:         FST.GetRecordFields(t, flags)
          |> Array.map (fun f ->
              let r = FSV.PreComputeRecordFieldReader f
              (i.GetEncodedFieldName mt f.Name, r, encodeOptionalField dE i f f.PropertyType))
      fun (x: obj) ->
          match x with
          | null ->
  
negative.code: let getDiscriminatorName (t: System.Type) =
      t.GetCustomAttributesData()
      |> Seq.tryPick (fun cad ->
          if cad.Constructor.DeclaringType = typeof<A.NamedUnionCasesAttribute> then
              Some (cad.ConstructorArguments.[0].Value :?> string)
          else None)
  
  let getNameAttr (m: System.Reflection.MemberInfo) =
      m.GetCustomAttributesData()
      |> Seq.tryPick (fun cad ->
          if cad.Constructor.DeclaringType = typeof<A.NameAttribute> then
              Some (cad.ConstructorArguments.[0].Value :?> string)
          else None)
  
  type Reflection.UnionCaseInfo with
      member this.CustomizedName =
  