anchor.diff:      /// Create a nested type to represent a versioned S3 object
       let createTypedVersionedS3Object (ownerType : ProvidedTypeDefinition) client (bucket : Amazon.S3.Model.S3Bucket) (s3Object : Amazon.S3.Model.S3Object) =
           let typedS3Object = runtimeType<obj> s3Object.Key
  -        typedS3Object.AddXmlDocDelayed(fun () -> sprintf "A strongly typed interface to a versioned S3 object %s" s3Object.Key)
  +        typedS3Object.AddXmlDoc(sprintf "A strongly typed interface to a versioned S3 object %s" s3Object.Key)
   
           // nested type to represent the latest version of the object
           typedS3Object.AddMember(createTypedS3Object ownerType client bucket (Some "Latest") s3Object)
  
positive.code: 
  [<AutoOpen>]
  module internal Helpers =
      let erasedType<'T> assemblyName rootNamespace typeName = 
          ProvidedTypeDefinition(assemblyName, rootNamespace, typeName, Some(typeof<'T>), HideObjectMethods = true)
  
  
negative.code: 
          typedS3Object
  
      /// Create a nested type to represent a S3 folder
      let rec createTypedS3Folder (ownerType : ProvidedTypeDefinition) client (bucket : Amazon.S3.Model.S3Bucket) isVersioned prefix folderName =
          let typedFolder = runtimeType<obj> folderName
          typedFolder.AddXmlDoc(sprintf "A strongly typed interface to a S3 folder %s" folderName)
  
          let prefix = prefix + folderName
          typedFolder.AddMembersDelayed(fun () ->
              getObjects client bucket (Prefix prefix) 
              |> Seq.map (createTypedS3Entry typedFolder client bucket isVersioned) 
              |> Seq.toList)
  
          typedFolder
  
      /// Create a nested type to represent a S3 entry (either Folder or S3Object)
      and createTypedS3Entry (ownerType : ProvidedTypeDefinition) client (bucket : Amazon.S3.Model.S3Bucket) isVersioned = function
          | Folder(Prefix prefix, FolderName folderName) -> createTypedS3Folder ownerType client bucket isVersioned prefix folderName
          | S3Object(s3Object) when isVersioned -> createTypedVersionedS3Object ownerType client bucket s3Object
          | S3Object(s3Object) -> createTypedS3Object ownerType client bucket None s3Object
  
      /// Create a nested type to represent a S3 bucket
      let createTypedBucket (ownerType : ProvidedTypeDefinition) client (bucket : Amazon.S3.Model.S3Bucket) =
          let typedBucket = runtimeType<obj> bucket.BucketName
          let isVersioned = isBucketVersioned client bucket
          typedBucket.AddXmlDoc(sprintf "A strongly typed interface to S3 bucket %s which was created on %A, and %s versioned" 
                                        bucket.BucketName bucket.CreationDate (if isVersioned then "is" else "is not"))
  
          typedBucket.AddMember(ProvidedProperty("CreationDate", typeof<DateTime>, IsStatic = true, GetterCode = (fun args -> <@@ bucket.CreationDate @@>)))
          typedBucket.AddMembersDelayed(fun () -> getObjects client bucket (Prefix "") |> Seq.map (createTypedS3Entry typedBucket client bucket isVersioned) |> Seq.toList)
  
          typedBucket
  
  