anchor.diff:          t.IsGenericType &&
           t.GetGenericTypeDefinition() = typedefof<list<_>>
       then
  -        let tI = t.GetGenericArguments().[0]
  -        callGeneric makeList "makeList" tI dD
  +        t.GetGenericArguments().[0]
  +        |> callGeneric <@ makeList @> dD
       else
       let cs =
           FST.GetUnionCases(t, flags)
  
positive.code:         | x ->
              raise EncoderException
  
  [<MethodImpl(MethodImplOptions.NoInlining)>]
  let makeList<'T> (dV: Value -> obj) =
      let dV x = dV x // Force the method to return an FSharpFunc instead of taking 2 args
      function
      | Array vs -> vs |> List.map (unbox<'T> << dV) |> box
      | _ -> raise DecoderException
  
  
negative.code:         let tr = fst (encNode (treeF.GetValue x))
          EncodedObject [ "tree", tr ] |> i.AddTag t
  
  let makeSet<'T when 'T : comparison> (dV: Value -> obj) = function
      | Array vs ->
          Set.ofList<'T>(vs |> List.map (unbox << dV))
          |> box
      | _ -> raise DecoderException
  
  let makeSet'<'T when 'T : comparison> (dV: Value -> obj) (xs: seq<obj>) =
      Set.ofSeq (Seq.cast<'T> xs)
      |> box
  
  let setDecoder dD (i: FormatSettings) (t: System.Type) =
      let tg = t.GetGenericArguments()
      if tg.Length <> 1 then raise EncoderException
      if i.FlattenCollections then
          callGeneric <@ makeSet @> dD tg.[0]
      else
      let dI = dD tg.[0]
      let mk = callGeneric <@ makeSet' @> dD tg.[0]
      let rec walk fields =
          seq {
              for f in fields do
  