anchor.diff:  [<AutoOpen>]
   module internal Helpers =
       type Prefix     = Prefix of string
  -    type FolderName = FolderName of string
   
       type S3Entry =
  -        | Folder    of Prefix * FolderName
  +        | Folder    of Prefix
           | S3Object  of Amazon.S3.Model.S3Object
   
       let erasedType<'T> assemblyName rootNamespace typeName = 
  
positive.code: 
      /// 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        
          typedBucket.AddXmlDoc(sprintf "A strongly typed interface to S3 bucket %s which was created on %A" 
                                        bucket.BucketName bucket.CreationDate)
  
          typedBucket.AddMember(ProvidedProperty("CreationDate", typeof<DateTime>, IsStatic = true, GetterCode = (fun args -> <@@ bucket.CreationDate @@>)))
          typedBucket.AddMembersDelayed(fun () -> 
              let isVersioned = isBucketVersioned client bucket
              getObjects client bucket (Prefix "") |> Seq.map (createTypedS3Entry typedBucket client bucket isVersioned) |> Seq.toList)
  
          typedBucket
  
  
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 =
          let typedFolder = runtimeType<obj> prefix
          typedFolder.AddXmlDoc(sprintf "A strongly typed interface to a S3 folder %s" prefix)
  
          typedFolder.AddMembersDelayed(fun () ->
              getObjects client bucket (Prefix prefix) 
              |> Seq.map (createTypedS3Entry typedFolder client bucket isVersioned) 
  