anchor.diff:          "Count", EncodedNumber count  
       ]
   
  +[<MethodImpl(MethodImplOptions.NoInlining)>]
  +let unmakeMap<'T> (dV: obj -> Encoded) =
  +    let dV x = dV x // Force the method to return an FSharpFunc instead of taking 2 args
  +    fun (x: obj) ->
  +        EncodedObject [
  +            for KeyValue(k, v) in unbox<Map<string, 'T>> x ->
  +                k, dV (box v)
  +        ]
  +
   let mapEncoder dE (i: FormatSettings) (t: System.Type) =
       let tg = t.GetGenericArguments()
       if tg.Length <> 2 then raise EncoderException
       let dK = dE tg.[0]
       let dV = dE tg.[1]
  +    if i.FlattenCollections && tg.[0] = typeof<string> then
  +        let x = unmakeMap dV // Prevents unmakeMap from being dead-code-eliminated
  +        FastInvoke.Compile(
  +            thisModule.GetMethod("unmakeMap",
  +                flags ||| System.Reflection.BindingFlags.Static
  +            ).MakeGenericMethod(tg.[1])
  +        ).Invoke1(dV)
  +        :?> (obj -> Encoded)
  +    else
       let treeF = t.GetFields(fieldFlags) |> Array.find (fun f -> f.Name.StartsWith "tree")
       let pair key value =
           EncodedObject [
  
positive.code: let listModule =
      typeof<Set<_>>.Assembly
          .GetType("Microsoft.FSharp.Collections.ListModule")
  
  let makeEmptySet (t: System.Type) =
      setModule
  
negative.code:         | Some v -> dec v
          | None -> raise DecoderException
  
  let opsModule =
      typeof<Set<_>>.Assembly
          .GetType("Microsoft.FSharp.Core.Operators")
  
  let setModule =
      typeof<Set<_>>.Assembly
          .GetType("Microsoft.FSharp.Collections.SetModule")
  
  let mapModule =
      typeof<Set<_>>.Assembly
          .GetType("Microsoft.FSharp.Collections.MapModule")
  
  let seqModule =
      typeof<Set<_>>.Assembly
          .GetType("Microsoft.FSharp.Collections.SeqModule")
  