anchor.diff:  
       let (?) = QuotationBuilder.(?)
   
  +    let private inferType typ =
  +        { ConvertedType = typ
  +          Converter = None
  +          ConversionCallingType = BsonTop }
  +
  +    let private inferCollection (elemType:Type) conv =
  +        { ConvertedType = elemType.MakeArrayType()
  +          Converter = Some conv
  +          ConversionCallingType = BsonTop }
  +
       // check if a type was already created for the inferedType before creating a new one
       let internal getOrCreateType ctx inferedType createType =
   
  
positive.code: 
              objectTy
  
          | InferedType.Collection (_, types) ->
  
              let conv = fun (doc:Expr) ->
                  ctx.BsonRuntimeType?ConvertArray ctx.IBsonTopType (doc, ReflectionHelpers.makeDelegate id ctx.IBsonTopType)
  
              // Return the underlying BsonValue without change
              { ConvertedType = ctx.IBsonTopType.MakeArrayType()
                Converter = Some conv
                ConversionCallingType = BsonTop }
  
          | InferedType.Heterogeneous _ ->
  
              // Return the underlying BsonValue without change
              { ConvertedType = ctx.IBsonTopType
                Converter = None
                ConversionCallingType = BsonTop }
  
          | _ -> failwith "Bson type not supported"
  
negative.code:               Converter = Some conv
                ConversionCallingType = conversionCallingType }
  
          | InferedType.Record(name, props, optional) -> getOrCreateType ctx inferedType <| fun () ->
  
              if optional && not optionalityHandledByParent then
  