anchor.diff:                  then Kind.Tuple
                   elif (FSharpType.IsUnion t && t.Name <> "FSharpList`1")
                   then getUnionKind t
  +                elif t.IsGenericType
  +                    && (t.GetGenericTypeDefinition() = typedefof<Map<_,_>> || t.GetGenericTypeDefinition() = typedefof<Dictionary<_,_>>)
  +                    && t.GetGenericArguments().[0] <> typeof<string>
  +                then
  +                    Kind.MapOrDictWithNonStringKey
                   else Kind.Other)
           kind <> Kind.Other
   
  
positive.code:                     then serializer.Serialize(writer, fields.[0])
                      else serializer.Serialize(writer, fields)
                      writer.WriteEndObject()
              | true, _ ->
                  serializer.Serialize(writer, value)
  
  
negative.code: 
  type [<Pojo>] U = MyCase of ja:int * jo:string
  type [<StringEnum>] U2 = Foo | [<CompiledName("B-A-R")>] Bar
  type UnionKey = K1 | K2 of string
  type RecordKey = { Key: string }
  
  module Test =
      let test (o: 'T) =
  