anchor.diff:          | String x -> x
           | _ -> raise DecoderException
       add EncodedString decString d
  -    let epoch = System.DateTime(1970, 1, 1, 0, 0, 0, System.DateTimeKind.Utc)
  -    let encDateTime (d: System.DateTime) =
  -        EncodedNumber (string (d.ToUniversalTime() - epoch).TotalMilliseconds)
  -    let decDateTime = function
  -        | Number x ->
  -            match tryParseDouble x with
  -            | true, x -> epoch + System.TimeSpan.FromMilliseconds x
  -            | _ -> raise DecoderException
  -        | _ -> raise DecoderException
  -    add encDateTime decDateTime d
       let encTimeSpan (t: System.TimeSpan) =
           EncodedNumber (string t.TotalMilliseconds)
       let decTimeSpan = function
  
positive.code:             EncodeUnionTag = defaultEncodeUnionTag
              GetEncodedUnionFieldName = fun _ i -> "$" + string i
              RepresentNullUnionsAsAbsentField = false
              Pack = pack
          }
  
  
negative.code:     |> Seq.toArray
  
  let objectEncoder dE (i: FormatSettings) (t: System.Type) =
      if t = typeof<System.DateTime> then
          fun (x: obj) ->
              match x with
              | :? System.DateTime as t -> i.EncodeDateTime t
              | _ -> raise EncoderException
      elif not t.IsSerializable then
          raise (NoEncodingException t)
      else
      let fs = getObjectFields t
      let ms = fs |> Array.map (fun x -> x :> System.Reflection.MemberInfo)
      let es = fs |> Array.map (fun f ->
  