anchor.diff:              let f = (if isEnc then "Encode" else "Decode") + n
               let m = comp.GetClassInfo(providerType).Value.Methods.Keys |> Seq.find (fun m -> m.Value.MethodName = f)
               Call(Some x, NonGeneric providerType, NonGeneric m, args)
  +        let invokeId (comp: M.ICompilation) x = 
  +            let m = comp.GetClassInfo(providerType).Value.Methods.Keys |> Seq.find (fun m -> m.Value.MethodName = "Id")
  +            Call(Some x, NonGeneric providerType, NonGeneric m, [])
   
           type EncodeResult = Choice<Expression, string, unit>
   
  
positive.code:                                                 e.Value.FullName = "Microsoft.FSharp.Core.FSharpOption`1" -> false
                                              | _ -> true
                                          )
                                          |> Seq.map (fun rf -> rf.Name) |> Set.ofSeq
                                      | _ -> 
                                          match uci.Kind with 
                                          | M.NormalFSharpUnionCase fs ->
  
negative.code:         let fail x = Choice2Of3 x : EncodeResult
          let generic = Choice3Of3 () : EncodeResult
  
          /// Returns None if MacroNeedsResolvedTypeArg.
          let getEncoding name isEnc param warn (comp: M.ICompilation) (t: Type) : option<Expression> =
              let ctx = System.Collections.Generic.Dictionary()
              let call = invoke comp param.Provider isEnc
              let ident = invokeId comp param.Provider 
              let rec encode t =
                  match t with
                  | ArrayType (t, 1) ->
  