anchor.diff:  // ## Example
   //
   //      type S3  = S3Provider.Account<"AWS Key", "AWS Secret">
  -//      let etag = S3.``my.bucket``.``2013-12-13/My file.txt``.ETag
  -//      let utf8 = S3.``my.bucket``.``2013-12-13/My file.txt``.Content.UTF8
  -//      let raw  = S3.``my.bucket``.``2013-12-13/My image.png``.Content.Raw
  -//      let lastModified = S3.``my.bucket``.``2013-12-13/My image.png``.LastModified
  +//      type bucket = S3.``my.bucket``
  +//      type folder = bucket.``2013-12-13/``
  +//      let etag = folder.``My file.txt``.ETag
  +//      let utf8 = folder.``My file.txt``.Content.UTF8
  +//      let raw  = folder.``My image.png``.Content.Raw
  +//      let lastModified = folder.``My image.png``.LastModified
  +//      type search = bucket.Search<"2013-12-">
  +//      let searchResultContent = search.``2013-12-13``.``My file.txt``.Content.Raw
   //
   namespace AwsProviders
   
  
positive.code: 
      /// 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.AddXmlDoc(sprintf "A strongly typed interface to a versioned S3 object %s" s3Object.Key)
  
          // nested type to represent the latest version of the object
  
negative.code:         | "Enabled" | "Suspended" -> true
          | _ -> false
  
      /// Returns a pretty name (without the folder prefixes) for the specified S3 object
      let getPrettyS3ObjectName (s3Object : Amazon.S3.Model.S3Object) =
          match s3Object.Key.LastIndexOf("/") with
          | -1  -> s3Object.Key
          | idx -> s3Object.Key.Substring(idx + 1)
  
      /// Returns a pretty name (without the folder prefixes) for the specified S3 object
      let getPrettyFolderName (Prefix prefix) =
          match prefix.LastIndexOf('/', prefix.Length - 2, prefix.Length - 1) with
          | -1  -> prefix
          | idx -> prefix.Substring(idx + 1)
  
      /// Returns all the S3 objects in the specified S3 bucket
      let getObjects (client : Amazon.S3.IAmazonS3) (bucket : Amazon.S3.Model.S3Bucket) (Prefix prefix) =
          let req = new Amazon.S3.Model.ListObjectsRequest()
          req.BucketName <- bucket.BucketName
          req.Prefix     <- prefix
          req.MaxKeys    <- 1000
          req.Delimiter  <- "/"
  
          let response = client.ListObjects(req)
  
          let entries = seq {
              yield! response.CommonPrefixes 
                     |> Seq.map (fun prefix -> 
                          let prefix = Prefix prefix
                          Folder(prefix, FolderName <| getPrettyFolderName prefix))
              yield! response.S3Objects |> Seq.map S3Object
          }
  
          // return whether or not there's more results, as well as the current set of results
          response.IsTruncated, entries
  
      /// Returns all the versions for the specified S3 object
      let getObjectVersions (client : Amazon.S3.IAmazonS3) (bucket : Amazon.S3.Model.S3Bucket) (s3Object : Amazon.S3.Model.S3Object) =
  