anchor.diff:  type Encoder<'T>(enc: 'T -> Encoded) =
       member this.Encode x = enc x
   
  +type FormatSettings =
  +    {
  +        /// Tag the given encoded value with its type.
  +        AddTag : System.Type -> Encoded -> Encoded
  +        /// Get the JSON-encoded name of the given F# record field.
  +        GetEncodedRecordFieldName : Reflection.TypeDefinition -> string -> string
  +        /// Pack an encoded value to JSON.
  +        Pack : Encoded -> Value
  +    }
  +
   type Serializer =
       {
  -        Decode : option<M.Info -> Value -> obj>
  -        Encode : option<M.Info -> obj -> Encoded>
  +        Decode : option<FormatSettings -> Value -> obj>
  +        Encode : option<FormatSettings -> obj -> Encoded>
       }
   
   let simple enc dec =
  
positive.code:     let fs = getObjectFields t
      let ms = fs |> Array.map (fun x -> x :> System.Reflection.MemberInfo)
      let es = fs |> Array.map (fun f -> (f.Name, dE f.FieldType))
      fun (i: M.Info) (x: obj) ->
          match x with
          | null ->
              EncodedNull
  
negative.code: let enumEncoder dE (t: System.Type) =
      let uT = System.Enum.GetUnderlyingType t
      let uE = dE uT
      fun (i: FormatSettings) (x: obj) ->
          uE i (System.Convert.ChangeType(x, uT)) : Encoded
  
  let enumDecoder dD (t: System.Type) =
      let uT = System.Enum.GetUnderlyingType t
      let uD = dD uT
      fun (i: FormatSettings) (x: Value) ->
          let y : obj = uD i x
          System.Enum.ToObject(t, y)
  
  