diff --git a/README.md b/README.md
--- a/README.md
+++ b/README.md
@@ -1,22 +1,35 @@
 # Amazon WorkSpaces SDK
 
-> _Warning:_ This is an experimental preview release which is still under heavy development and not intended for public consumption, _caveat emptor_!
-
+* [Version](#version)
 * [Description](#description)
 * [Contribute](#contribute)
 * [Licence](#licence)
 
+
+## Version
+
+`1.0.0`
+
+
 ## Description
 
-Amazon WorkSpaces offers you an easy way to provide a cloud-based desktop
-experience to your end-users. You simply select from a choice of bundles that
-offer a range of different amounts of CPU, memory, storage, and a choice of
-applications. Users can connect from a PC, Mac desktop computer, iPad,
-Kindle, or Android tablet.
+Amazon WorkSpaces Service
 
+This is the /Amazon WorkSpaces API Reference/. This guide provides
+detailed information about Amazon WorkSpaces operations, data types,
+parameters, and errors.
+
 Documentation is available via [Hackage](http://hackage.haskell.org/package/amazonka-workspaces)
 and the [AWS API Reference](http://docs.aws.amazon.com/workspaces/latest/devguide/welcome.html).
 
+The types from this library are intended to be used with [amazonka](http://hackage.haskell.org/package/amazonka),
+which provides mechanisms for specifying AuthN/AuthZ information and sending requests.
+
+Use of lenses is required for constructing and manipulating types.
+This is due to the amount of nesting of AWS types and transparency regarding
+de/serialisation into more palatable Haskell values.
+The provided lenses should be compatible with any of the major lens libraries
+[lens](http://hackage.haskell.org/package/lens) or [lens-family-core](http://hackage.haskell.org/package/lens-family-core).
 
 ## Contribute
 
diff --git a/amazonka-workspaces.cabal b/amazonka-workspaces.cabal
--- a/amazonka-workspaces.cabal
+++ b/amazonka-workspaces.cabal
@@ -1,29 +1,37 @@
 name:                  amazonka-workspaces
-version:               0.3.6
+version:               1.0.0
 synopsis:              Amazon WorkSpaces SDK.
 homepage:              https://github.com/brendanhay/amazonka
 license:               OtherLicense
 license-file:          LICENSE
 author:                Brendan Hay
 maintainer:            Brendan Hay <brendan.g.hay@gmail.com>
-copyright:             Copyright (c) 2013-2014 Brendan Hay
+copyright:             Copyright (c) 2013-2015 Brendan Hay
 category:              Network, AWS, Cloud, Distributed Computing
 build-type:            Simple
 extra-source-files:    README.md
 cabal-version:         >= 1.10
 
 description:
-    Amazon WorkSpaces offers you an easy way to provide a cloud-based desktop
-    experience to your end-users. You simply select from a choice of bundles that
-    offer a range of different amounts of CPU, memory, storage, and a choice of
-    applications. Users can connect from a PC, Mac desktop computer, iPad,
-    Kindle, or Android tablet.
+    Amazon WorkSpaces Service
 
+    This is the /Amazon WorkSpaces API Reference/. This guide provides
+    detailed information about Amazon WorkSpaces operations, data types,
+    parameters, and errors.
     .
-    /See:/ <http://docs.aws.amazon.com/workspaces/latest/devguide/welcome.html AWS API Reference>
+    The types from this library are intended to be used with
+    <http://hackage.haskell.org/package/amazonka amazonka>, which provides
+    mechanisms for specifying AuthN/AuthZ information and sending requests.
     .
-    /Warning:/ This is an experimental preview release which is still under
-    heavy development and not intended for public consumption, caveat emptor!
+    Use of lenses is required for constructing and manipulating types.
+    This is due to the amount of nesting of AWS types and transparency regarding
+    de/serialisation into more palatable Haskell values.
+    The provided lenses should be compatible with any of the major lens libraries
+    such as <http://hackage.haskell.org/package/lens lens> or
+    <http://hackage.haskell.org/package/lens-family-core lens-family-core>.
+    .
+    See "Network.AWS.WorkSpaces" and the <http://docs.aws.amazon.com/workspaces/latest/devguide/welcome.html AWS API Reference>
+    to get started.
 
 source-repository head
     type:     git
@@ -45,9 +53,40 @@
         , Network.AWS.WorkSpaces.RebuildWorkspaces
         , Network.AWS.WorkSpaces.TerminateWorkspaces
         , Network.AWS.WorkSpaces.Types
+        , Network.AWS.WorkSpaces.Waiters
 
     other-modules:
+          Network.AWS.WorkSpaces.Types.Product
+        , Network.AWS.WorkSpaces.Types.Sum
 
     build-depends:
-          amazonka-core == 0.3.6.*
+          amazonka-core == 1.0.0.*
         , base          >= 4.7     && < 5
+
+test-suite amazonka-workspaces-test
+    type:              exitcode-stdio-1.0
+    default-language:  Haskell2010
+    hs-source-dirs:    test
+    main-is:           Main.hs
+
+    ghc-options:       -Wall -threaded
+
+    -- This is not comprehensive if modules have manually been added.
+    -- It exists to ensure cabal 'somewhat' detects test module changes.
+    other-modules:
+          Test.AWS.WorkSpaces
+        , Test.AWS.Gen.WorkSpaces
+        , Test.AWS.WorkSpaces.Internal
+
+    build-depends:
+          amazonka-core == 1.0.0
+        , amazonka-test == 1.0.0
+        , amazonka-workspaces == 1.0.0
+        , base
+        , bytestring
+        , lens
+        , tasty
+        , tasty-hunit
+        , text
+        , time
+        , unordered-containers
diff --git a/gen/Network/AWS/WorkSpaces.hs b/gen/Network/AWS/WorkSpaces.hs
--- a/gen/Network/AWS/WorkSpaces.hs
+++ b/gen/Network/AWS/WorkSpaces.hs
@@ -1,36 +1,212 @@
+{-# OPTIONS_GHC -fno-warn-unused-imports    #-}
+{-# OPTIONS_GHC -fno-warn-duplicate-exports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
 -- Module      : Network.AWS.WorkSpaces
--- Copyright   : (c) 2013-2014 Brendan Hay <brendan.g.hay@gmail.com>
--- License     : This Source Code Form is subject to the terms of
---               the Mozilla Public License, v. 2.0.
---               A copy of the MPL can be found in the LICENSE file or
---               you can obtain it at http://mozilla.org/MPL/2.0/.
+-- Copyright   : (c) 2013-2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
--- Stability   : experimental
+-- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- | Amazon WorkSpaces offers you an easy way to provide a cloud-based desktop
--- experience to your end-users. You simply select from a choice of bundles that
--- offer a range of different amounts of CPU, memory, storage, and a choice of
--- applications. Users can connect from a PC, Mac desktop computer, iPad,
--- Kindle, or Android tablet.
+-- Amazon WorkSpaces Service
+--
+-- This is the /Amazon WorkSpaces API Reference/. This guide provides
+-- detailed information about Amazon WorkSpaces operations, data types,
+-- parameters, and errors.
+--
+-- /See:/ <http://docs.aws.amazon.com/workspaces/latest/devguide/welcome.html AWS API Reference>
 module Network.AWS.WorkSpaces
-    ( module Network.AWS.WorkSpaces.CreateWorkspaces
-    , module Network.AWS.WorkSpaces.DescribeWorkspaceBundles
+    (
+    -- * Service
+      WorkSpaces
+
+    -- * Errors
+    -- $errors
+
+    -- ** InvalidParameterValuesException
+    , _InvalidParameterValuesException
+
+    -- ** ResourceUnavailableException
+    , _ResourceUnavailableException
+
+    -- ** ResourceLimitExceededException
+    , _ResourceLimitExceededException
+
+    -- * Waiters
+    -- $waiters
+
+    -- * Operations
+    -- $operations
+
+    -- ** DescribeWorkspaceDirectories
     , module Network.AWS.WorkSpaces.DescribeWorkspaceDirectories
-    , module Network.AWS.WorkSpaces.DescribeWorkspaces
-    , module Network.AWS.WorkSpaces.RebootWorkspaces
+
+    -- ** DescribeWorkspaceBundles
+    , module Network.AWS.WorkSpaces.DescribeWorkspaceBundles
+
+    -- ** RebuildWorkspaces
     , module Network.AWS.WorkSpaces.RebuildWorkspaces
+
+    -- ** RebootWorkspaces
+    , module Network.AWS.WorkSpaces.RebootWorkspaces
+
+    -- ** TerminateWorkspaces
     , module Network.AWS.WorkSpaces.TerminateWorkspaces
-    , module Network.AWS.WorkSpaces.Types
+
+    -- ** CreateWorkspaces
+    , module Network.AWS.WorkSpaces.CreateWorkspaces
+
+    -- ** DescribeWorkspaces
+    , module Network.AWS.WorkSpaces.DescribeWorkspaces
+
+    -- * Types
+
+    -- ** Compute
+    , Compute (..)
+
+    -- ** WorkspaceDirectoryState
+    , WorkspaceDirectoryState (..)
+
+    -- ** WorkspaceDirectoryType
+    , WorkspaceDirectoryType (..)
+
+    -- ** WorkspaceState
+    , WorkspaceState (..)
+
+    -- ** ComputeType
+    , ComputeType
+    , computeType
+    , ctName
+
+    -- ** DefaultWorkspaceCreationProperties
+    , DefaultWorkspaceCreationProperties
+    , defaultWorkspaceCreationProperties
+    , dwcpCustomSecurityGroupId
+    , dwcpUserEnabledAsLocalAdministrator
+    , dwcpEnableWorkDocs
+    , dwcpEnableInternetAccess
+    , dwcpDefaultOu
+
+    -- ** FailedCreateWorkspaceRequest
+    , FailedCreateWorkspaceRequest
+    , failedCreateWorkspaceRequest
+    , fcwrWorkspaceRequest
+    , fcwrErrorCode
+    , fcwrErrorMessage
+
+    -- ** FailedWorkspaceChangeRequest
+    , FailedWorkspaceChangeRequest
+    , failedWorkspaceChangeRequest
+    , fwcrErrorCode
+    , fwcrWorkspaceId
+    , fwcrErrorMessage
+
+    -- ** RebootRequest
+    , RebootRequest
+    , rebootRequest
+    , rWorkspaceId
+
+    -- ** RebuildRequest
+    , RebuildRequest
+    , rebuildRequest
+    , rrWorkspaceId
+
+    -- ** TerminateRequest
+    , TerminateRequest
+    , terminateRequest
+    , trWorkspaceId
+
+    -- ** UserStorage
+    , UserStorage
+    , userStorage
+    , usCapacity
+
+    -- ** Workspace
+    , Workspace
+    , workspace
+    , wDirectoryId
+    , wIPAddress
+    , wState
+    , wUserName
+    , wSubnetId
+    , wBundleId
+    , wErrorCode
+    , wWorkspaceId
+    , wErrorMessage
+
+    -- ** WorkspaceBundle
+    , WorkspaceBundle
+    , workspaceBundle
+    , wbOwner
+    , wbBundleId
+    , wbName
+    , wbComputeType
+    , wbUserStorage
+    , wbDescription
+
+    -- ** WorkspaceDirectory
+    , WorkspaceDirectory
+    , workspaceDirectory
+    , wdRegistrationCode
+    , wdIAMRoleId
+    , wdDirectoryId
+    , wdState
+    , wdCustomerUserName
+    , wdSubnetIds
+    , wdAlias
+    , wdDirectoryType
+    , wdWorkspaceSecurityGroupId
+    , wdWorkspaceCreationProperties
+    , wdDNSIPAddresses
+    , wdDirectoryName
+
+    -- ** WorkspaceRequest
+    , WorkspaceRequest
+    , workspaceRequest
+    , wrDirectoryId
+    , wrUserName
+    , wrBundleId
     ) where
 
-import Network.AWS.WorkSpaces.CreateWorkspaces
-import Network.AWS.WorkSpaces.DescribeWorkspaceBundles
-import Network.AWS.WorkSpaces.DescribeWorkspaceDirectories
-import Network.AWS.WorkSpaces.DescribeWorkspaces
-import Network.AWS.WorkSpaces.RebootWorkspaces
-import Network.AWS.WorkSpaces.RebuildWorkspaces
-import Network.AWS.WorkSpaces.TerminateWorkspaces
-import Network.AWS.WorkSpaces.Types
+import           Network.AWS.WorkSpaces.CreateWorkspaces
+import           Network.AWS.WorkSpaces.DescribeWorkspaceBundles
+import           Network.AWS.WorkSpaces.DescribeWorkspaceDirectories
+import           Network.AWS.WorkSpaces.DescribeWorkspaces
+import           Network.AWS.WorkSpaces.RebootWorkspaces
+import           Network.AWS.WorkSpaces.RebuildWorkspaces
+import           Network.AWS.WorkSpaces.TerminateWorkspaces
+import           Network.AWS.WorkSpaces.Types
+import           Network.AWS.WorkSpaces.Waiters
+
+{- $errors
+Error matchers are designed for use with the functions provided by
+<http://hackage.haskell.org/package/lens/docs/Control-Exception-Lens.html Control.Exception.Lens>.
+This allows catching (and rethrowing) service specific errors returned
+by 'WorkSpaces'.
+-}
+
+{- $operations
+Some AWS operations return results that are incomplete and require subsequent
+requests in order to obtain the entire result set. The process of sending
+subsequent requests to continue where a previous request left off is called
+pagination. For example, the 'ListObjects' operation of Amazon S3 returns up to
+1000 objects at a time, and you must send subsequent requests with the
+appropriate Marker in order to retrieve the next page of results.
+
+Operations that have an 'AWSPager' instance can transparently perform subsequent
+requests, correctly setting Markers and other request facets to iterate through
+the entire result set of a truncated API operation. Operations which support
+this have an additional note in the documentation.
+
+Many operations have the ability to filter results on the server side. See the
+individual operation parameters for details.
+-}
+
+{- $waiters
+Waiters poll by repeatedly sending a request until some remote success condition
+configured by the 'Wait' specification is fulfilled. The 'Wait' specification
+determines how many attempts should be made, in addition to delay and retry strategies.
+-}
diff --git a/gen/Network/AWS/WorkSpaces/CreateWorkspaces.hs b/gen/Network/AWS/WorkSpaces/CreateWorkspaces.hs
--- a/gen/Network/AWS/WorkSpaces/CreateWorkspaces.hs
+++ b/gen/Network/AWS/WorkSpaces/CreateWorkspaces.hs
@@ -1,136 +1,148 @@
-{-# LANGUAGE DataKinds                   #-}
-{-# LANGUAGE DeriveGeneric               #-}
-{-# LANGUAGE FlexibleInstances           #-}
-{-# LANGUAGE GeneralizedNewtypeDeriving  #-}
-{-# LANGUAGE LambdaCase                  #-}
-{-# LANGUAGE NoImplicitPrelude           #-}
-{-# LANGUAGE OverloadedStrings           #-}
-{-# LANGUAGE RecordWildCards             #-}
-{-# LANGUAGE TypeFamilies                #-}
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
 
 {-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
 
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
 -- Module      : Network.AWS.WorkSpaces.CreateWorkspaces
--- Copyright   : (c) 2013-2014 Brendan Hay <brendan.g.hay@gmail.com>
--- License     : This Source Code Form is subject to the terms of
---               the Mozilla Public License, v. 2.0.
---               A copy of the MPL can be found in the LICENSE file or
---               you can obtain it at http://mozilla.org/MPL/2.0/.
+-- Copyright   : (c) 2013-2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
--- Stability   : experimental
+-- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- | Creates one or more WorkSpaces.
+-- Creates one or more WorkSpaces.
 --
 -- This operation is asynchronous and returns before the WorkSpaces are
 -- created.
 --
---
---
--- <http://docs.aws.amazon.com/workspaces/latest/devguide/API_CreateWorkspaces.html>
+-- /See:/ <http://docs.aws.amazon.com/workspaces/latest/devguide/API_CreateWorkspaces.html AWS API Reference> for CreateWorkspaces.
 module Network.AWS.WorkSpaces.CreateWorkspaces
     (
-    -- * Request
-      CreateWorkspaces
-    -- ** Request constructor
-    , createWorkspaces
-    -- ** Request lenses
+    -- * Creating a Request
+      createWorkspaces
+    , CreateWorkspaces
+    -- * Request Lenses
     , cwWorkspaces
 
-    -- * Response
-    , CreateWorkspacesResponse
-    -- ** Response constructor
+    -- * Destructuring the Response
     , createWorkspacesResponse
-    -- ** Response lenses
-    , cwrFailedRequests
-    , cwrPendingRequests
+    , CreateWorkspacesResponse
+    -- * Response Lenses
+    , cwrsFailedRequests
+    , cwrsPendingRequests
+    , cwrsStatus
     ) where
 
-import Network.AWS.Data (Object)
-import Network.AWS.Prelude
-import Network.AWS.Request.JSON
-import Network.AWS.WorkSpaces.Types
-import qualified GHC.Exts
-
-newtype CreateWorkspaces = CreateWorkspaces
-    { _cwWorkspaces :: List1 "Workspaces" WorkspaceRequest
-    } deriving (Eq, Read, Show, Semigroup)
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
+import           Network.AWS.WorkSpaces.Types
+import           Network.AWS.WorkSpaces.Types.Product
 
--- | 'CreateWorkspaces' constructor.
+-- | Contains the inputs for the CreateWorkspaces operation.
 --
--- The fields accessible through corresponding lenses are:
+-- /See:/ 'createWorkspaces' smart constructor.
+newtype CreateWorkspaces = CreateWorkspaces'
+    { _cwWorkspaces :: List1 WorkspaceRequest
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'CreateWorkspaces' with the minimum fields required to make a request.
 --
--- * 'cwWorkspaces' @::@ 'NonEmpty' 'WorkspaceRequest'
+-- Use one of the following lenses to modify other fields as desired:
 --
-createWorkspaces :: NonEmpty WorkspaceRequest -- ^ 'cwWorkspaces'
-                 -> CreateWorkspaces
-createWorkspaces p1 = CreateWorkspaces
-    { _cwWorkspaces = withIso _List1 (const id) p1
+-- * 'cwWorkspaces'
+createWorkspaces
+    :: NonEmpty WorkspaceRequest -- ^ 'cwWorkspaces'
+    -> CreateWorkspaces
+createWorkspaces pWorkspaces_ =
+    CreateWorkspaces'
+    { _cwWorkspaces = _List1 # pWorkspaces_
     }
 
 -- | An array of structures that specify the WorkSpaces to create.
 cwWorkspaces :: Lens' CreateWorkspaces (NonEmpty WorkspaceRequest)
-cwWorkspaces = lens _cwWorkspaces (\s a -> s { _cwWorkspaces = a }) . _List1
+cwWorkspaces = lens _cwWorkspaces (\ s a -> s{_cwWorkspaces = a}) . _List1;
 
-data CreateWorkspacesResponse = CreateWorkspacesResponse
-    { _cwrFailedRequests  :: List "FailedRequests" FailedCreateWorkspaceRequest
-    , _cwrPendingRequests :: List "PendingRequests" Workspace
-    } deriving (Eq, Read, Show)
+instance AWSRequest CreateWorkspaces where
+        type Sv CreateWorkspaces = WorkSpaces
+        type Rs CreateWorkspaces = CreateWorkspacesResponse
+        request = postJSON
+        response
+          = receiveJSON
+              (\ s h x ->
+                 CreateWorkspacesResponse' <$>
+                   (x .?> "FailedRequests" .!@ mempty) <*>
+                     (x .?> "PendingRequests" .!@ mempty)
+                     <*> (pure (fromEnum s)))
 
--- | 'CreateWorkspacesResponse' constructor.
+instance ToHeaders CreateWorkspaces where
+        toHeaders
+          = const
+              (mconcat
+                 ["X-Amz-Target" =#
+                    ("WorkspacesService.CreateWorkspaces" :: ByteString),
+                  "Content-Type" =#
+                    ("application/x-amz-json-1.1" :: ByteString)])
+
+instance ToJSON CreateWorkspaces where
+        toJSON CreateWorkspaces'{..}
+          = object ["Workspaces" .= _cwWorkspaces]
+
+instance ToPath CreateWorkspaces where
+        toPath = const "/"
+
+instance ToQuery CreateWorkspaces where
+        toQuery = const mempty
+
+-- | Contains the result of the CreateWorkspaces operation.
 --
--- The fields accessible through corresponding lenses are:
+-- /See:/ 'createWorkspacesResponse' smart constructor.
+data CreateWorkspacesResponse = CreateWorkspacesResponse'
+    { _cwrsFailedRequests  :: !(Maybe [FailedCreateWorkspaceRequest])
+    , _cwrsPendingRequests :: !(Maybe [Workspace])
+    , _cwrsStatus          :: !Int
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'CreateWorkspacesResponse' with the minimum fields required to make a request.
 --
--- * 'cwrFailedRequests' @::@ ['FailedCreateWorkspaceRequest']
+-- Use one of the following lenses to modify other fields as desired:
 --
--- * 'cwrPendingRequests' @::@ ['Workspace']
+-- * 'cwrsFailedRequests'
 --
-createWorkspacesResponse :: CreateWorkspacesResponse
-createWorkspacesResponse = CreateWorkspacesResponse
-    { _cwrFailedRequests  = mempty
-    , _cwrPendingRequests = mempty
+-- * 'cwrsPendingRequests'
+--
+-- * 'cwrsStatus'
+createWorkspacesResponse
+    :: Int -- ^ 'cwrsStatus'
+    -> CreateWorkspacesResponse
+createWorkspacesResponse pStatus_ =
+    CreateWorkspacesResponse'
+    { _cwrsFailedRequests = Nothing
+    , _cwrsPendingRequests = Nothing
+    , _cwrsStatus = pStatus_
     }
 
 -- | An array of structures that represent the WorkSpaces that could not be
 -- created.
-cwrFailedRequests :: Lens' CreateWorkspacesResponse [FailedCreateWorkspaceRequest]
-cwrFailedRequests =
-    lens _cwrFailedRequests (\s a -> s { _cwrFailedRequests = a })
-        . _List
+cwrsFailedRequests :: Lens' CreateWorkspacesResponse [FailedCreateWorkspaceRequest]
+cwrsFailedRequests = lens _cwrsFailedRequests (\ s a -> s{_cwrsFailedRequests = a}) . _Default . _Coerce;
 
 -- | An array of structures that represent the WorkSpaces that were created.
 --
--- Because this operation is asynchronous, the identifier in 'WorkspaceId' is not
--- immediately available. If you immediately call 'DescribeWorkspaces' with this
--- identifier, no information will be returned.
-cwrPendingRequests :: Lens' CreateWorkspacesResponse [Workspace]
-cwrPendingRequests =
-    lens _cwrPendingRequests (\s a -> s { _cwrPendingRequests = a })
-        . _List
-
-instance ToPath CreateWorkspaces where
-    toPath = const "/"
-
-instance ToQuery CreateWorkspaces where
-    toQuery = const mempty
-
-instance ToHeaders CreateWorkspaces
-
-instance ToJSON CreateWorkspaces where
-    toJSON CreateWorkspaces{..} = object
-        [ "Workspaces" .= _cwWorkspaces
-        ]
-
-instance AWSRequest CreateWorkspaces where
-    type Sv CreateWorkspaces = WorkSpaces
-    type Rs CreateWorkspaces = CreateWorkspacesResponse
-
-    request  = post "CreateWorkspaces"
-    response = jsonResponse
+-- Because this operation is asynchronous, the identifier in 'WorkspaceId'
+-- is not immediately available. If you immediately call DescribeWorkspaces
+-- with this identifier, no information will be returned.
+cwrsPendingRequests :: Lens' CreateWorkspacesResponse [Workspace]
+cwrsPendingRequests = lens _cwrsPendingRequests (\ s a -> s{_cwrsPendingRequests = a}) . _Default . _Coerce;
 
-instance FromJSON CreateWorkspacesResponse where
-    parseJSON = withObject "CreateWorkspacesResponse" $ \o -> CreateWorkspacesResponse
-        <$> o .:? "FailedRequests" .!= mempty
-        <*> o .:? "PendingRequests" .!= mempty
+-- | The response status code.
+cwrsStatus :: Lens' CreateWorkspacesResponse Int
+cwrsStatus = lens _cwrsStatus (\ s a -> s{_cwrsStatus = a});
diff --git a/gen/Network/AWS/WorkSpaces/DescribeWorkspaceBundles.hs b/gen/Network/AWS/WorkSpaces/DescribeWorkspaceBundles.hs
--- a/gen/Network/AWS/WorkSpaces/DescribeWorkspaceBundles.hs
+++ b/gen/Network/AWS/WorkSpaces/DescribeWorkspaceBundles.hs
@@ -1,160 +1,182 @@
-{-# LANGUAGE DataKinds                   #-}
-{-# LANGUAGE DeriveGeneric               #-}
-{-# LANGUAGE FlexibleInstances           #-}
-{-# LANGUAGE GeneralizedNewtypeDeriving  #-}
-{-# LANGUAGE LambdaCase                  #-}
-{-# LANGUAGE NoImplicitPrelude           #-}
-{-# LANGUAGE OverloadedStrings           #-}
-{-# LANGUAGE RecordWildCards             #-}
-{-# LANGUAGE TypeFamilies                #-}
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
 
 {-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
 
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
 -- Module      : Network.AWS.WorkSpaces.DescribeWorkspaceBundles
--- Copyright   : (c) 2013-2014 Brendan Hay <brendan.g.hay@gmail.com>
--- License     : This Source Code Form is subject to the terms of
---               the Mozilla Public License, v. 2.0.
---               A copy of the MPL can be found in the LICENSE file or
---               you can obtain it at http://mozilla.org/MPL/2.0/.
+-- Copyright   : (c) 2013-2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
--- Stability   : experimental
+-- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- | Obtains information about the WorkSpace bundles that are available to your
--- account in the specified region.
+-- Obtains information about the WorkSpace bundles that are available to
+-- your account in the specified region.
 --
--- You can filter the results with either the 'BundleIds' parameter, or the 'Owner'
--- parameter, but not both.
+-- You can filter the results with either the 'BundleIds' parameter, or the
+-- 'Owner' parameter, but not both.
 --
--- This operation supports pagination with the use of the 'NextToken' request and
--- response parameters. If more results are available, the 'NextToken' response
--- member contains a token that you pass in the next call to this operation to
--- retrieve the next set of items.
+-- This operation supports pagination with the use of the 'NextToken'
+-- request and response parameters. If more results are available, the
+-- 'NextToken' response member contains a token that you pass in the next
+-- call to this operation to retrieve the next set of items.
 --
--- <http://docs.aws.amazon.com/workspaces/latest/devguide/API_DescribeWorkspaceBundles.html>
+-- /See:/ <http://docs.aws.amazon.com/workspaces/latest/devguide/API_DescribeWorkspaceBundles.html AWS API Reference> for DescribeWorkspaceBundles.
 module Network.AWS.WorkSpaces.DescribeWorkspaceBundles
     (
-    -- * Request
-      DescribeWorkspaceBundles
-    -- ** Request constructor
-    , describeWorkspaceBundles
-    -- ** Request lenses
+    -- * Creating a Request
+      describeWorkspaceBundles
+    , DescribeWorkspaceBundles
+    -- * Request Lenses
     , dwbBundleIds
-    , dwbNextToken
     , dwbOwner
+    , dwbNextToken
 
-    -- * Response
-    , DescribeWorkspaceBundlesResponse
-    -- ** Response constructor
+    -- * Destructuring the Response
     , describeWorkspaceBundlesResponse
-    -- ** Response lenses
-    , dwbrBundles
-    , dwbrNextToken
+    , DescribeWorkspaceBundlesResponse
+    -- * Response Lenses
+    , dwbrsBundles
+    , dwbrsNextToken
+    , dwbrsStatus
     ) where
 
-import Network.AWS.Data (Object)
-import Network.AWS.Prelude
-import Network.AWS.Request.JSON
-import Network.AWS.WorkSpaces.Types
-import qualified GHC.Exts
-
-data DescribeWorkspaceBundles = DescribeWorkspaceBundles
-    { _dwbBundleIds :: List1 "BundleIds" Text
-    , _dwbNextToken :: Maybe Text
-    , _dwbOwner     :: Maybe Text
-    } deriving (Eq, Ord, Read, Show)
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
+import           Network.AWS.WorkSpaces.Types
+import           Network.AWS.WorkSpaces.Types.Product
 
--- | 'DescribeWorkspaceBundles' constructor.
+-- | Contains the inputs for the DescribeWorkspaceBundles operation.
 --
--- The fields accessible through corresponding lenses are:
+-- /See:/ 'describeWorkspaceBundles' smart constructor.
+data DescribeWorkspaceBundles = DescribeWorkspaceBundles'
+    { _dwbBundleIds :: !(Maybe (List1 Text))
+    , _dwbOwner     :: !(Maybe Text)
+    , _dwbNextToken :: !(Maybe Text)
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'DescribeWorkspaceBundles' with the minimum fields required to make a request.
 --
--- * 'dwbBundleIds' @::@ 'NonEmpty' 'Text'
+-- Use one of the following lenses to modify other fields as desired:
 --
--- * 'dwbNextToken' @::@ 'Maybe' 'Text'
+-- * 'dwbBundleIds'
 --
--- * 'dwbOwner' @::@ 'Maybe' 'Text'
+-- * 'dwbOwner'
 --
-describeWorkspaceBundles :: NonEmpty Text -- ^ 'dwbBundleIds'
-                         -> DescribeWorkspaceBundles
-describeWorkspaceBundles p1 = DescribeWorkspaceBundles
-    { _dwbBundleIds = withIso _List1 (const id) p1
-    , _dwbOwner     = Nothing
+-- * 'dwbNextToken'
+describeWorkspaceBundles
+    :: DescribeWorkspaceBundles
+describeWorkspaceBundles =
+    DescribeWorkspaceBundles'
+    { _dwbBundleIds = Nothing
+    , _dwbOwner = Nothing
     , _dwbNextToken = Nothing
     }
 
--- | An array of strings that contains the identifiers of the bundles to retrieve.
--- This parameter cannot be combined with any other filter parameter.
-dwbBundleIds :: Lens' DescribeWorkspaceBundles (NonEmpty Text)
-dwbBundleIds = lens _dwbBundleIds (\s a -> s { _dwbBundleIds = a }) . _List1
-
--- | The 'NextToken' value from a previous call to this operation. Pass null if this
--- is the first call.
-dwbNextToken :: Lens' DescribeWorkspaceBundles (Maybe Text)
-dwbNextToken = lens _dwbNextToken (\s a -> s { _dwbNextToken = a })
+-- | An array of strings that contains the identifiers of the bundles to
+-- retrieve. This parameter cannot be combined with any other filter
+-- parameter.
+dwbBundleIds :: Lens' DescribeWorkspaceBundles (Maybe (NonEmpty Text))
+dwbBundleIds = lens _dwbBundleIds (\ s a -> s{_dwbBundleIds = a}) . mapping _List1;
 
--- | The owner of the bundles to retrieve. This parameter cannot be combined with
--- any other filter parameter.
+-- | The owner of the bundles to retrieve. This parameter cannot be combined
+-- with any other filter parameter.
 --
 -- This contains one of the following values:
 --
--- null - Retrieves the bundles that belong to the account making the call.  'AMAZON' - Retrieves the bundles that are provided by AWS.
+-- -   null - Retrieves the bundles that belong to the account making the
+--     call.
+-- -   'AMAZON' - Retrieves the bundles that are provided by AWS.
 dwbOwner :: Lens' DescribeWorkspaceBundles (Maybe Text)
-dwbOwner = lens _dwbOwner (\s a -> s { _dwbOwner = a })
+dwbOwner = lens _dwbOwner (\ s a -> s{_dwbOwner = a});
 
-data DescribeWorkspaceBundlesResponse = DescribeWorkspaceBundlesResponse
-    { _dwbrBundles   :: List "Bundles" WorkspaceBundle
-    , _dwbrNextToken :: Maybe Text
-    } deriving (Eq, Read, Show)
+-- | The 'NextToken' value from a previous call to this operation. Pass null
+-- if this is the first call.
+dwbNextToken :: Lens' DescribeWorkspaceBundles (Maybe Text)
+dwbNextToken = lens _dwbNextToken (\ s a -> s{_dwbNextToken = a});
 
--- | 'DescribeWorkspaceBundlesResponse' constructor.
---
--- The fields accessible through corresponding lenses are:
---
--- * 'dwbrBundles' @::@ ['WorkspaceBundle']
---
--- * 'dwbrNextToken' @::@ 'Maybe' 'Text'
---
-describeWorkspaceBundlesResponse :: DescribeWorkspaceBundlesResponse
-describeWorkspaceBundlesResponse = DescribeWorkspaceBundlesResponse
-    { _dwbrBundles   = mempty
-    , _dwbrNextToken = Nothing
-    }
+instance AWSRequest DescribeWorkspaceBundles where
+        type Sv DescribeWorkspaceBundles = WorkSpaces
+        type Rs DescribeWorkspaceBundles =
+             DescribeWorkspaceBundlesResponse
+        request = postJSON
+        response
+          = receiveJSON
+              (\ s h x ->
+                 DescribeWorkspaceBundlesResponse' <$>
+                   (x .?> "Bundles" .!@ mempty) <*> (x .?> "NextToken")
+                     <*> (pure (fromEnum s)))
 
--- | An array of structures that contain information about the bundles.
-dwbrBundles :: Lens' DescribeWorkspaceBundlesResponse [WorkspaceBundle]
-dwbrBundles = lens _dwbrBundles (\s a -> s { _dwbrBundles = a }) . _List
+instance ToHeaders DescribeWorkspaceBundles where
+        toHeaders
+          = const
+              (mconcat
+                 ["X-Amz-Target" =#
+                    ("WorkspacesService.DescribeWorkspaceBundles" ::
+                       ByteString),
+                  "Content-Type" =#
+                    ("application/x-amz-json-1.1" :: ByteString)])
 
--- | If not null, more results are available. Pass this value for the 'NextToken'
--- parameter in a subsequent call to this operation to retrieve the next set of
--- items. This token is valid for one day and must be used within that timeframe.
-dwbrNextToken :: Lens' DescribeWorkspaceBundlesResponse (Maybe Text)
-dwbrNextToken = lens _dwbrNextToken (\s a -> s { _dwbrNextToken = a })
+instance ToJSON DescribeWorkspaceBundles where
+        toJSON DescribeWorkspaceBundles'{..}
+          = object
+              ["BundleIds" .= _dwbBundleIds, "Owner" .= _dwbOwner,
+               "NextToken" .= _dwbNextToken]
 
 instance ToPath DescribeWorkspaceBundles where
-    toPath = const "/"
+        toPath = const "/"
 
 instance ToQuery DescribeWorkspaceBundles where
-    toQuery = const mempty
+        toQuery = const mempty
 
-instance ToHeaders DescribeWorkspaceBundles
+-- | Contains the results of the DescribeWorkspaceBundles operation.
+--
+-- /See:/ 'describeWorkspaceBundlesResponse' smart constructor.
+data DescribeWorkspaceBundlesResponse = DescribeWorkspaceBundlesResponse'
+    { _dwbrsBundles   :: !(Maybe [WorkspaceBundle])
+    , _dwbrsNextToken :: !(Maybe Text)
+    , _dwbrsStatus    :: !Int
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
 
-instance ToJSON DescribeWorkspaceBundles where
-    toJSON DescribeWorkspaceBundles{..} = object
-        [ "BundleIds" .= _dwbBundleIds
-        , "Owner"     .= _dwbOwner
-        , "NextToken" .= _dwbNextToken
-        ]
+-- | Creates a value of 'DescribeWorkspaceBundlesResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'dwbrsBundles'
+--
+-- * 'dwbrsNextToken'
+--
+-- * 'dwbrsStatus'
+describeWorkspaceBundlesResponse
+    :: Int -- ^ 'dwbrsStatus'
+    -> DescribeWorkspaceBundlesResponse
+describeWorkspaceBundlesResponse pStatus_ =
+    DescribeWorkspaceBundlesResponse'
+    { _dwbrsBundles = Nothing
+    , _dwbrsNextToken = Nothing
+    , _dwbrsStatus = pStatus_
+    }
 
-instance AWSRequest DescribeWorkspaceBundles where
-    type Sv DescribeWorkspaceBundles = WorkSpaces
-    type Rs DescribeWorkspaceBundles = DescribeWorkspaceBundlesResponse
+-- | An array of structures that contain information about the bundles.
+dwbrsBundles :: Lens' DescribeWorkspaceBundlesResponse [WorkspaceBundle]
+dwbrsBundles = lens _dwbrsBundles (\ s a -> s{_dwbrsBundles = a}) . _Default . _Coerce;
 
-    request  = post "DescribeWorkspaceBundles"
-    response = jsonResponse
+-- | If not null, more results are available. Pass this value for the
+-- 'NextToken' parameter in a subsequent call to this operation to retrieve
+-- the next set of items. This token is valid for one day and must be used
+-- within that timeframe.
+dwbrsNextToken :: Lens' DescribeWorkspaceBundlesResponse (Maybe Text)
+dwbrsNextToken = lens _dwbrsNextToken (\ s a -> s{_dwbrsNextToken = a});
 
-instance FromJSON DescribeWorkspaceBundlesResponse where
-    parseJSON = withObject "DescribeWorkspaceBundlesResponse" $ \o -> DescribeWorkspaceBundlesResponse
-        <$> o .:? "Bundles" .!= mempty
-        <*> o .:? "NextToken"
+-- | The response status code.
+dwbrsStatus :: Lens' DescribeWorkspaceBundlesResponse Int
+dwbrsStatus = lens _dwbrsStatus (\ s a -> s{_dwbrsStatus = a});
diff --git a/gen/Network/AWS/WorkSpaces/DescribeWorkspaceDirectories.hs b/gen/Network/AWS/WorkSpaces/DescribeWorkspaceDirectories.hs
--- a/gen/Network/AWS/WorkSpaces/DescribeWorkspaceDirectories.hs
+++ b/gen/Network/AWS/WorkSpaces/DescribeWorkspaceDirectories.hs
@@ -1,143 +1,165 @@
-{-# LANGUAGE DataKinds                   #-}
-{-# LANGUAGE DeriveGeneric               #-}
-{-# LANGUAGE FlexibleInstances           #-}
-{-# LANGUAGE GeneralizedNewtypeDeriving  #-}
-{-# LANGUAGE LambdaCase                  #-}
-{-# LANGUAGE NoImplicitPrelude           #-}
-{-# LANGUAGE OverloadedStrings           #-}
-{-# LANGUAGE RecordWildCards             #-}
-{-# LANGUAGE TypeFamilies                #-}
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
 
 {-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
 
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
 -- Module      : Network.AWS.WorkSpaces.DescribeWorkspaceDirectories
--- Copyright   : (c) 2013-2014 Brendan Hay <brendan.g.hay@gmail.com>
--- License     : This Source Code Form is subject to the terms of
---               the Mozilla Public License, v. 2.0.
---               A copy of the MPL can be found in the LICENSE file or
---               you can obtain it at http://mozilla.org/MPL/2.0/.
+-- Copyright   : (c) 2013-2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
--- Stability   : experimental
+-- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- | Retrieves information about the AWS Directory Service directories in the
--- region that are registered with Amazon WorkSpaces and are available to your
--- account.
+-- Retrieves information about the AWS Directory Service directories in the
+-- region that are registered with Amazon WorkSpaces and are available to
+-- your account.
 --
--- This operation supports pagination with the use of the 'NextToken' request and
--- response parameters. If more results are available, the 'NextToken' response
--- member contains a token that you pass in the next call to this operation to
--- retrieve the next set of items.
+-- This operation supports pagination with the use of the 'NextToken'
+-- request and response parameters. If more results are available, the
+-- 'NextToken' response member contains a token that you pass in the next
+-- call to this operation to retrieve the next set of items.
 --
--- <http://docs.aws.amazon.com/workspaces/latest/devguide/API_DescribeWorkspaceDirectories.html>
+-- /See:/ <http://docs.aws.amazon.com/workspaces/latest/devguide/API_DescribeWorkspaceDirectories.html AWS API Reference> for DescribeWorkspaceDirectories.
 module Network.AWS.WorkSpaces.DescribeWorkspaceDirectories
     (
-    -- * Request
-      DescribeWorkspaceDirectories
-    -- ** Request constructor
-    , describeWorkspaceDirectories
-    -- ** Request lenses
-    , dwdDirectoryIds
+    -- * Creating a Request
+      describeWorkspaceDirectories
+    , DescribeWorkspaceDirectories
+    -- * Request Lenses
     , dwdNextToken
+    , dwdDirectoryIds
 
-    -- * Response
-    , DescribeWorkspaceDirectoriesResponse
-    -- ** Response constructor
+    -- * Destructuring the Response
     , describeWorkspaceDirectoriesResponse
-    -- ** Response lenses
-    , dwdrDirectories
-    , dwdrNextToken
+    , DescribeWorkspaceDirectoriesResponse
+    -- * Response Lenses
+    , dwdrsDirectories
+    , dwdrsNextToken
+    , dwdrsStatus
     ) where
 
-import Network.AWS.Data (Object)
-import Network.AWS.Prelude
-import Network.AWS.Request.JSON
-import Network.AWS.WorkSpaces.Types
-import qualified GHC.Exts
-
-data DescribeWorkspaceDirectories = DescribeWorkspaceDirectories
-    { _dwdDirectoryIds :: List1 "DirectoryIds" Text
-    , _dwdNextToken    :: Maybe Text
-    } deriving (Eq, Ord, Read, Show)
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
+import           Network.AWS.WorkSpaces.Types
+import           Network.AWS.WorkSpaces.Types.Product
 
--- | 'DescribeWorkspaceDirectories' constructor.
+-- | Contains the inputs for the DescribeWorkspaceDirectories operation.
 --
--- The fields accessible through corresponding lenses are:
+-- /See:/ 'describeWorkspaceDirectories' smart constructor.
+data DescribeWorkspaceDirectories = DescribeWorkspaceDirectories'
+    { _dwdNextToken    :: !(Maybe Text)
+    , _dwdDirectoryIds :: !(Maybe (List1 Text))
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'DescribeWorkspaceDirectories' with the minimum fields required to make a request.
 --
--- * 'dwdDirectoryIds' @::@ 'NonEmpty' 'Text'
+-- Use one of the following lenses to modify other fields as desired:
 --
--- * 'dwdNextToken' @::@ 'Maybe' 'Text'
+-- * 'dwdNextToken'
 --
-describeWorkspaceDirectories :: NonEmpty Text -- ^ 'dwdDirectoryIds'
-                             -> DescribeWorkspaceDirectories
-describeWorkspaceDirectories p1 = DescribeWorkspaceDirectories
-    { _dwdDirectoryIds = withIso _List1 (const id) p1
-    , _dwdNextToken    = Nothing
+-- * 'dwdDirectoryIds'
+describeWorkspaceDirectories
+    :: DescribeWorkspaceDirectories
+describeWorkspaceDirectories =
+    DescribeWorkspaceDirectories'
+    { _dwdNextToken = Nothing
+    , _dwdDirectoryIds = Nothing
     }
 
--- | An array of strings that contains the directory identifiers to retrieve
--- information for. If this member is null, all directories are retrieved.
-dwdDirectoryIds :: Lens' DescribeWorkspaceDirectories (NonEmpty Text)
-dwdDirectoryIds = lens _dwdDirectoryIds (\s a -> s { _dwdDirectoryIds = a }) . _List1
-
--- | The 'NextToken' value from a previous call to this operation. Pass null if this
--- is the first call.
+-- | The 'NextToken' value from a previous call to this operation. Pass null
+-- if this is the first call.
 dwdNextToken :: Lens' DescribeWorkspaceDirectories (Maybe Text)
-dwdNextToken = lens _dwdNextToken (\s a -> s { _dwdNextToken = a })
+dwdNextToken = lens _dwdNextToken (\ s a -> s{_dwdNextToken = a});
 
-data DescribeWorkspaceDirectoriesResponse = DescribeWorkspaceDirectoriesResponse
-    { _dwdrDirectories :: List "Directories" WorkspaceDirectory
-    , _dwdrNextToken   :: Maybe Text
-    } deriving (Eq, Read, Show)
+-- | An array of strings that contains the directory identifiers to retrieve
+-- information for. If this member is null, all directories are retrieved.
+dwdDirectoryIds :: Lens' DescribeWorkspaceDirectories (Maybe (NonEmpty Text))
+dwdDirectoryIds = lens _dwdDirectoryIds (\ s a -> s{_dwdDirectoryIds = a}) . mapping _List1;
 
--- | 'DescribeWorkspaceDirectoriesResponse' constructor.
---
--- The fields accessible through corresponding lenses are:
---
--- * 'dwdrDirectories' @::@ ['WorkspaceDirectory']
---
--- * 'dwdrNextToken' @::@ 'Maybe' 'Text'
---
-describeWorkspaceDirectoriesResponse :: DescribeWorkspaceDirectoriesResponse
-describeWorkspaceDirectoriesResponse = DescribeWorkspaceDirectoriesResponse
-    { _dwdrDirectories = mempty
-    , _dwdrNextToken   = Nothing
-    }
+instance AWSRequest DescribeWorkspaceDirectories
+         where
+        type Sv DescribeWorkspaceDirectories = WorkSpaces
+        type Rs DescribeWorkspaceDirectories =
+             DescribeWorkspaceDirectoriesResponse
+        request = postJSON
+        response
+          = receiveJSON
+              (\ s h x ->
+                 DescribeWorkspaceDirectoriesResponse' <$>
+                   (x .?> "Directories" .!@ mempty) <*>
+                     (x .?> "NextToken")
+                     <*> (pure (fromEnum s)))
 
--- | An array of structures that contain information about the directories.
-dwdrDirectories :: Lens' DescribeWorkspaceDirectoriesResponse [WorkspaceDirectory]
-dwdrDirectories = lens _dwdrDirectories (\s a -> s { _dwdrDirectories = a }) . _List
+instance ToHeaders DescribeWorkspaceDirectories where
+        toHeaders
+          = const
+              (mconcat
+                 ["X-Amz-Target" =#
+                    ("WorkspacesService.DescribeWorkspaceDirectories" ::
+                       ByteString),
+                  "Content-Type" =#
+                    ("application/x-amz-json-1.1" :: ByteString)])
 
--- | If not null, more results are available. Pass this value for the 'NextToken'
--- parameter in a subsequent call to this operation to retrieve the next set of
--- items. This token is valid for one day and must be used within that timeframe.
-dwdrNextToken :: Lens' DescribeWorkspaceDirectoriesResponse (Maybe Text)
-dwdrNextToken = lens _dwdrNextToken (\s a -> s { _dwdrNextToken = a })
+instance ToJSON DescribeWorkspaceDirectories where
+        toJSON DescribeWorkspaceDirectories'{..}
+          = object
+              ["NextToken" .= _dwdNextToken,
+               "DirectoryIds" .= _dwdDirectoryIds]
 
 instance ToPath DescribeWorkspaceDirectories where
-    toPath = const "/"
+        toPath = const "/"
 
 instance ToQuery DescribeWorkspaceDirectories where
-    toQuery = const mempty
+        toQuery = const mempty
 
-instance ToHeaders DescribeWorkspaceDirectories
+-- | Contains the results of the DescribeWorkspaceDirectories operation.
+--
+-- /See:/ 'describeWorkspaceDirectoriesResponse' smart constructor.
+data DescribeWorkspaceDirectoriesResponse = DescribeWorkspaceDirectoriesResponse'
+    { _dwdrsDirectories :: !(Maybe [WorkspaceDirectory])
+    , _dwdrsNextToken   :: !(Maybe Text)
+    , _dwdrsStatus      :: !Int
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
 
-instance ToJSON DescribeWorkspaceDirectories where
-    toJSON DescribeWorkspaceDirectories{..} = object
-        [ "DirectoryIds" .= _dwdDirectoryIds
-        , "NextToken"    .= _dwdNextToken
-        ]
+-- | Creates a value of 'DescribeWorkspaceDirectoriesResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'dwdrsDirectories'
+--
+-- * 'dwdrsNextToken'
+--
+-- * 'dwdrsStatus'
+describeWorkspaceDirectoriesResponse
+    :: Int -- ^ 'dwdrsStatus'
+    -> DescribeWorkspaceDirectoriesResponse
+describeWorkspaceDirectoriesResponse pStatus_ =
+    DescribeWorkspaceDirectoriesResponse'
+    { _dwdrsDirectories = Nothing
+    , _dwdrsNextToken = Nothing
+    , _dwdrsStatus = pStatus_
+    }
 
-instance AWSRequest DescribeWorkspaceDirectories where
-    type Sv DescribeWorkspaceDirectories = WorkSpaces
-    type Rs DescribeWorkspaceDirectories = DescribeWorkspaceDirectoriesResponse
+-- | An array of structures that contain information about the directories.
+dwdrsDirectories :: Lens' DescribeWorkspaceDirectoriesResponse [WorkspaceDirectory]
+dwdrsDirectories = lens _dwdrsDirectories (\ s a -> s{_dwdrsDirectories = a}) . _Default . _Coerce;
 
-    request  = post "DescribeWorkspaceDirectories"
-    response = jsonResponse
+-- | If not null, more results are available. Pass this value for the
+-- 'NextToken' parameter in a subsequent call to this operation to retrieve
+-- the next set of items. This token is valid for one day and must be used
+-- within that timeframe.
+dwdrsNextToken :: Lens' DescribeWorkspaceDirectoriesResponse (Maybe Text)
+dwdrsNextToken = lens _dwdrsNextToken (\ s a -> s{_dwdrsNextToken = a});
 
-instance FromJSON DescribeWorkspaceDirectoriesResponse where
-    parseJSON = withObject "DescribeWorkspaceDirectoriesResponse" $ \o -> DescribeWorkspaceDirectoriesResponse
-        <$> o .:? "Directories" .!= mempty
-        <*> o .:? "NextToken"
+-- | The response status code.
+dwdrsStatus :: Lens' DescribeWorkspaceDirectoriesResponse Int
+dwdrsStatus = lens _dwdrsStatus (\ s a -> s{_dwdrsStatus = a});
diff --git a/gen/Network/AWS/WorkSpaces/DescribeWorkspaces.hs b/gen/Network/AWS/WorkSpaces/DescribeWorkspaces.hs
--- a/gen/Network/AWS/WorkSpaces/DescribeWorkspaces.hs
+++ b/gen/Network/AWS/WorkSpaces/DescribeWorkspaces.hs
@@ -1,196 +1,219 @@
-{-# LANGUAGE DataKinds                   #-}
-{-# LANGUAGE DeriveGeneric               #-}
-{-# LANGUAGE FlexibleInstances           #-}
-{-# LANGUAGE GeneralizedNewtypeDeriving  #-}
-{-# LANGUAGE LambdaCase                  #-}
-{-# LANGUAGE NoImplicitPrelude           #-}
-{-# LANGUAGE OverloadedStrings           #-}
-{-# LANGUAGE RecordWildCards             #-}
-{-# LANGUAGE TypeFamilies                #-}
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
 
 {-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
 
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
 -- Module      : Network.AWS.WorkSpaces.DescribeWorkspaces
--- Copyright   : (c) 2013-2014 Brendan Hay <brendan.g.hay@gmail.com>
--- License     : This Source Code Form is subject to the terms of
---               the Mozilla Public License, v. 2.0.
---               A copy of the MPL can be found in the LICENSE file or
---               you can obtain it at http://mozilla.org/MPL/2.0/.
+-- Copyright   : (c) 2013-2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
--- Stability   : experimental
+-- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- | Obtains information about the specified WorkSpaces.
+-- Obtains information about the specified WorkSpaces.
 --
--- Only one of the filter parameters, such as 'BundleId', 'DirectoryId', or 'WorkspaceIds', can be specified at a time.
+-- Only one of the filter parameters, such as 'BundleId', 'DirectoryId', or
+-- 'WorkspaceIds', can be specified at a time.
 --
--- This operation supports pagination with the use of the 'NextToken' request and
--- response parameters. If more results are available, the 'NextToken' response
--- member contains a token that you pass in the next call to this operation to
--- retrieve the next set of items.
+-- This operation supports pagination with the use of the 'NextToken'
+-- request and response parameters. If more results are available, the
+-- 'NextToken' response member contains a token that you pass in the next
+-- call to this operation to retrieve the next set of items.
 --
--- <http://docs.aws.amazon.com/workspaces/latest/devguide/API_DescribeWorkspaces.html>
+-- /See:/ <http://docs.aws.amazon.com/workspaces/latest/devguide/API_DescribeWorkspaces.html AWS API Reference> for DescribeWorkspaces.
 module Network.AWS.WorkSpaces.DescribeWorkspaces
     (
-    -- * Request
-      DescribeWorkspaces
-    -- ** Request constructor
-    , describeWorkspaces
-    -- ** Request lenses
-    , dwBundleId
+    -- * Creating a Request
+      describeWorkspaces
+    , DescribeWorkspaces
+    -- * Request Lenses
     , dwDirectoryId
-    , dwLimit
-    , dwNextToken
-    , dwUserName
     , dwWorkspaceIds
+    , dwUserName
+    , dwBundleId
+    , dwNextToken
+    , dwLimit
 
-    -- * Response
-    , DescribeWorkspacesResponse
-    -- ** Response constructor
+    -- * Destructuring the Response
     , describeWorkspacesResponse
-    -- ** Response lenses
-    , dwrNextToken
-    , dwrWorkspaces
+    , DescribeWorkspacesResponse
+    -- * Response Lenses
+    , dwrsNextToken
+    , dwrsWorkspaces
+    , dwrsStatus
     ) where
 
-import Network.AWS.Data (Object)
-import Network.AWS.Prelude
-import Network.AWS.Request.JSON
-import Network.AWS.WorkSpaces.Types
-import qualified GHC.Exts
-
-data DescribeWorkspaces = DescribeWorkspaces
-    { _dwBundleId     :: Maybe Text
-    , _dwDirectoryId  :: Maybe Text
-    , _dwLimit        :: Maybe Nat
-    , _dwNextToken    :: Maybe Text
-    , _dwUserName     :: Maybe Text
-    , _dwWorkspaceIds :: List1 "WorkspaceIds" Text
-    } deriving (Eq, Ord, Read, Show)
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
+import           Network.AWS.WorkSpaces.Types
+import           Network.AWS.WorkSpaces.Types.Product
 
--- | 'DescribeWorkspaces' constructor.
+-- | Contains the inputs for the DescribeWorkspaces operation.
 --
--- The fields accessible through corresponding lenses are:
+-- /See:/ 'describeWorkspaces' smart constructor.
+data DescribeWorkspaces = DescribeWorkspaces'
+    { _dwDirectoryId  :: !(Maybe Text)
+    , _dwWorkspaceIds :: !(Maybe (List1 Text))
+    , _dwUserName     :: !(Maybe Text)
+    , _dwBundleId     :: !(Maybe Text)
+    , _dwNextToken    :: !(Maybe Text)
+    , _dwLimit        :: !(Maybe Nat)
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'DescribeWorkspaces' with the minimum fields required to make a request.
 --
--- * 'dwBundleId' @::@ 'Maybe' 'Text'
+-- Use one of the following lenses to modify other fields as desired:
 --
--- * 'dwDirectoryId' @::@ 'Maybe' 'Text'
+-- * 'dwDirectoryId'
 --
--- * 'dwLimit' @::@ 'Maybe' 'Natural'
+-- * 'dwWorkspaceIds'
 --
--- * 'dwNextToken' @::@ 'Maybe' 'Text'
+-- * 'dwUserName'
 --
--- * 'dwUserName' @::@ 'Maybe' 'Text'
+-- * 'dwBundleId'
 --
--- * 'dwWorkspaceIds' @::@ 'NonEmpty' 'Text'
+-- * 'dwNextToken'
 --
-describeWorkspaces :: NonEmpty Text -- ^ 'dwWorkspaceIds'
-                   -> DescribeWorkspaces
-describeWorkspaces p1 = DescribeWorkspaces
-    { _dwWorkspaceIds = withIso _List1 (const id) p1
-    , _dwDirectoryId  = Nothing
-    , _dwUserName     = Nothing
-    , _dwBundleId     = Nothing
-    , _dwLimit        = Nothing
-    , _dwNextToken    = Nothing
+-- * 'dwLimit'
+describeWorkspaces
+    :: DescribeWorkspaces
+describeWorkspaces =
+    DescribeWorkspaces'
+    { _dwDirectoryId = Nothing
+    , _dwWorkspaceIds = Nothing
+    , _dwUserName = Nothing
+    , _dwBundleId = Nothing
+    , _dwNextToken = Nothing
+    , _dwLimit = Nothing
     }
 
--- | The identifier of a bundle to obtain the WorkSpaces for. All WorkSpaces that
--- are created from this bundle will be retrieved. This parameter cannot be
--- combined with any other filter parameter.
-dwBundleId :: Lens' DescribeWorkspaces (Maybe Text)
-dwBundleId = lens _dwBundleId (\s a -> s { _dwBundleId = a })
-
 -- | Specifies the directory identifier to which to limit the WorkSpaces.
--- Optionally, you can specify a specific directory user with the 'UserName'
--- parameter. This parameter cannot be combined with any other filter parameter.
+-- Optionally, you can specify a specific directory user with the
+-- 'UserName' parameter. This parameter cannot be combined with any other
+-- filter parameter.
 dwDirectoryId :: Lens' DescribeWorkspaces (Maybe Text)
-dwDirectoryId = lens _dwDirectoryId (\s a -> s { _dwDirectoryId = a })
+dwDirectoryId = lens _dwDirectoryId (\ s a -> s{_dwDirectoryId = a});
 
+-- | An array of strings that contain the identifiers of the WorkSpaces for
+-- which to retrieve information. This parameter cannot be combined with
+-- any other filter parameter.
+--
+-- Because the CreateWorkspaces operation is asynchronous, the identifier
+-- returned by CreateWorkspaces is not immediately available. If you
+-- immediately call DescribeWorkspaces with this identifier, no information
+-- will be returned.
+dwWorkspaceIds :: Lens' DescribeWorkspaces (Maybe (NonEmpty Text))
+dwWorkspaceIds = lens _dwWorkspaceIds (\ s a -> s{_dwWorkspaceIds = a}) . mapping _List1;
+
+-- | Used with the 'DirectoryId' parameter to specify the directory user for
+-- which to obtain the WorkSpace.
+dwUserName :: Lens' DescribeWorkspaces (Maybe Text)
+dwUserName = lens _dwUserName (\ s a -> s{_dwUserName = a});
+
+-- | The identifier of a bundle to obtain the WorkSpaces for. All WorkSpaces
+-- that are created from this bundle will be retrieved. This parameter
+-- cannot be combined with any other filter parameter.
+dwBundleId :: Lens' DescribeWorkspaces (Maybe Text)
+dwBundleId = lens _dwBundleId (\ s a -> s{_dwBundleId = a});
+
+-- | The 'NextToken' value from a previous call to this operation. Pass null
+-- if this is the first call.
+dwNextToken :: Lens' DescribeWorkspaces (Maybe Text)
+dwNextToken = lens _dwNextToken (\ s a -> s{_dwNextToken = a});
+
 -- | The maximum number of items to return.
 dwLimit :: Lens' DescribeWorkspaces (Maybe Natural)
-dwLimit = lens _dwLimit (\s a -> s { _dwLimit = a }) . mapping _Nat
+dwLimit = lens _dwLimit (\ s a -> s{_dwLimit = a}) . mapping _Nat;
 
--- | The 'NextToken' value from a previous call to this operation. Pass null if this
--- is the first call.
-dwNextToken :: Lens' DescribeWorkspaces (Maybe Text)
-dwNextToken = lens _dwNextToken (\s a -> s { _dwNextToken = a })
+instance AWSRequest DescribeWorkspaces where
+        type Sv DescribeWorkspaces = WorkSpaces
+        type Rs DescribeWorkspaces =
+             DescribeWorkspacesResponse
+        request = postJSON
+        response
+          = receiveJSON
+              (\ s h x ->
+                 DescribeWorkspacesResponse' <$>
+                   (x .?> "NextToken") <*>
+                     (x .?> "Workspaces" .!@ mempty)
+                     <*> (pure (fromEnum s)))
 
--- | Used with the 'DirectoryId' parameter to specify the directory user for which
--- to obtain the WorkSpace.
-dwUserName :: Lens' DescribeWorkspaces (Maybe Text)
-dwUserName = lens _dwUserName (\s a -> s { _dwUserName = a })
+instance ToHeaders DescribeWorkspaces where
+        toHeaders
+          = const
+              (mconcat
+                 ["X-Amz-Target" =#
+                    ("WorkspacesService.DescribeWorkspaces" ::
+                       ByteString),
+                  "Content-Type" =#
+                    ("application/x-amz-json-1.1" :: ByteString)])
 
--- | An array of strings that contain the identifiers of the WorkSpaces for which
--- to retrieve information. This parameter cannot be combined with any other
--- filter parameter.
---
--- Because the 'CreateWorkspaces' operation is asynchronous, the identifier
--- returned by 'CreateWorkspaces' is not immediately available. If you immediately
--- call 'DescribeWorkspaces' with this identifier, no information will be returned.
-dwWorkspaceIds :: Lens' DescribeWorkspaces (NonEmpty Text)
-dwWorkspaceIds = lens _dwWorkspaceIds (\s a -> s { _dwWorkspaceIds = a }) . _List1
+instance ToJSON DescribeWorkspaces where
+        toJSON DescribeWorkspaces'{..}
+          = object
+              ["DirectoryId" .= _dwDirectoryId,
+               "WorkspaceIds" .= _dwWorkspaceIds,
+               "UserName" .= _dwUserName, "BundleId" .= _dwBundleId,
+               "NextToken" .= _dwNextToken, "Limit" .= _dwLimit]
 
-data DescribeWorkspacesResponse = DescribeWorkspacesResponse
-    { _dwrNextToken  :: Maybe Text
-    , _dwrWorkspaces :: List "Workspaces" Workspace
-    } deriving (Eq, Read, Show)
+instance ToPath DescribeWorkspaces where
+        toPath = const "/"
 
--- | 'DescribeWorkspacesResponse' constructor.
+instance ToQuery DescribeWorkspaces where
+        toQuery = const mempty
+
+-- | Contains the results for the DescribeWorkspaces operation.
 --
--- The fields accessible through corresponding lenses are:
+-- /See:/ 'describeWorkspacesResponse' smart constructor.
+data DescribeWorkspacesResponse = DescribeWorkspacesResponse'
+    { _dwrsNextToken  :: !(Maybe Text)
+    , _dwrsWorkspaces :: !(Maybe [Workspace])
+    , _dwrsStatus     :: !Int
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'DescribeWorkspacesResponse' with the minimum fields required to make a request.
 --
--- * 'dwrNextToken' @::@ 'Maybe' 'Text'
+-- Use one of the following lenses to modify other fields as desired:
 --
--- * 'dwrWorkspaces' @::@ ['Workspace']
+-- * 'dwrsNextToken'
 --
-describeWorkspacesResponse :: DescribeWorkspacesResponse
-describeWorkspacesResponse = DescribeWorkspacesResponse
-    { _dwrWorkspaces = mempty
-    , _dwrNextToken  = Nothing
+-- * 'dwrsWorkspaces'
+--
+-- * 'dwrsStatus'
+describeWorkspacesResponse
+    :: Int -- ^ 'dwrsStatus'
+    -> DescribeWorkspacesResponse
+describeWorkspacesResponse pStatus_ =
+    DescribeWorkspacesResponse'
+    { _dwrsNextToken = Nothing
+    , _dwrsWorkspaces = Nothing
+    , _dwrsStatus = pStatus_
     }
 
--- | If not null, more results are available. Pass this value for the 'NextToken'
--- parameter in a subsequent call to this operation to retrieve the next set of
--- items. This token is valid for one day and must be used within that timeframe.
-dwrNextToken :: Lens' DescribeWorkspacesResponse (Maybe Text)
-dwrNextToken = lens _dwrNextToken (\s a -> s { _dwrNextToken = a })
+-- | If not null, more results are available. Pass this value for the
+-- 'NextToken' parameter in a subsequent call to this operation to retrieve
+-- the next set of items. This token is valid for one day and must be used
+-- within that timeframe.
+dwrsNextToken :: Lens' DescribeWorkspacesResponse (Maybe Text)
+dwrsNextToken = lens _dwrsNextToken (\ s a -> s{_dwrsNextToken = a});
 
--- | An array of structures that contain the information about the WorkSpaces.
+-- | An array of structures that contain the information about the
+-- WorkSpaces.
 --
--- Because the 'CreateWorkspaces' operation is asynchronous, some of this
+-- Because the CreateWorkspaces operation is asynchronous, some of this
 -- information may be incomplete for a newly-created WorkSpace.
-dwrWorkspaces :: Lens' DescribeWorkspacesResponse [Workspace]
-dwrWorkspaces = lens _dwrWorkspaces (\s a -> s { _dwrWorkspaces = a }) . _List
-
-instance ToPath DescribeWorkspaces where
-    toPath = const "/"
-
-instance ToQuery DescribeWorkspaces where
-    toQuery = const mempty
-
-instance ToHeaders DescribeWorkspaces
-
-instance ToJSON DescribeWorkspaces where
-    toJSON DescribeWorkspaces{..} = object
-        [ "WorkspaceIds" .= _dwWorkspaceIds
-        , "DirectoryId"  .= _dwDirectoryId
-        , "UserName"     .= _dwUserName
-        , "BundleId"     .= _dwBundleId
-        , "Limit"        .= _dwLimit
-        , "NextToken"    .= _dwNextToken
-        ]
-
-instance AWSRequest DescribeWorkspaces where
-    type Sv DescribeWorkspaces = WorkSpaces
-    type Rs DescribeWorkspaces = DescribeWorkspacesResponse
-
-    request  = post "DescribeWorkspaces"
-    response = jsonResponse
+dwrsWorkspaces :: Lens' DescribeWorkspacesResponse [Workspace]
+dwrsWorkspaces = lens _dwrsWorkspaces (\ s a -> s{_dwrsWorkspaces = a}) . _Default . _Coerce;
 
-instance FromJSON DescribeWorkspacesResponse where
-    parseJSON = withObject "DescribeWorkspacesResponse" $ \o -> DescribeWorkspacesResponse
-        <$> o .:? "NextToken"
-        <*> o .:? "Workspaces" .!= mempty
+-- | The response status code.
+dwrsStatus :: Lens' DescribeWorkspacesResponse Int
+dwrsStatus = lens _dwrsStatus (\ s a -> s{_dwrsStatus = a});
diff --git a/gen/Network/AWS/WorkSpaces/RebootWorkspaces.hs b/gen/Network/AWS/WorkSpaces/RebootWorkspaces.hs
--- a/gen/Network/AWS/WorkSpaces/RebootWorkspaces.hs
+++ b/gen/Network/AWS/WorkSpaces/RebootWorkspaces.hs
@@ -1,131 +1,139 @@
-{-# LANGUAGE DataKinds                   #-}
-{-# LANGUAGE DeriveGeneric               #-}
-{-# LANGUAGE FlexibleInstances           #-}
-{-# LANGUAGE GeneralizedNewtypeDeriving  #-}
-{-# LANGUAGE LambdaCase                  #-}
-{-# LANGUAGE NoImplicitPrelude           #-}
-{-# LANGUAGE OverloadedStrings           #-}
-{-# LANGUAGE RecordWildCards             #-}
-{-# LANGUAGE TypeFamilies                #-}
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
 
 {-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
 
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
 -- Module      : Network.AWS.WorkSpaces.RebootWorkspaces
--- Copyright   : (c) 2013-2014 Brendan Hay <brendan.g.hay@gmail.com>
--- License     : This Source Code Form is subject to the terms of
---               the Mozilla Public License, v. 2.0.
---               A copy of the MPL can be found in the LICENSE file or
---               you can obtain it at http://mozilla.org/MPL/2.0/.
+-- Copyright   : (c) 2013-2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
--- Stability   : experimental
+-- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- | Reboots the specified WorkSpaces.
---
--- To be able to reboot a WorkSpace, the WorkSpace must have a State of 'AVAILABLE', 'IMPAIRED', or 'INOPERABLE'.
---
--- This operation is asynchronous and will return before the WorkSpaces have
--- rebooted.
+-- Reboots the specified WorkSpaces.
 --
+-- To be able to reboot a WorkSpace, the WorkSpace must have a __State__ of
+-- 'AVAILABLE', 'IMPAIRED', or 'INOPERABLE'.
 --
+-- This operation is asynchronous and will return before the WorkSpaces
+-- have rebooted.
 --
--- <http://docs.aws.amazon.com/workspaces/latest/devguide/API_RebootWorkspaces.html>
+-- /See:/ <http://docs.aws.amazon.com/workspaces/latest/devguide/API_RebootWorkspaces.html AWS API Reference> for RebootWorkspaces.
 module Network.AWS.WorkSpaces.RebootWorkspaces
     (
-    -- * Request
-      RebootWorkspaces
-    -- ** Request constructor
-    , rebootWorkspaces
-    -- ** Request lenses
+    -- * Creating a Request
+      rebootWorkspaces
+    , RebootWorkspaces
+    -- * Request Lenses
     , rwRebootWorkspaceRequests
 
-    -- * Response
-    , RebootWorkspacesResponse
-    -- ** Response constructor
+    -- * Destructuring the Response
     , rebootWorkspacesResponse
-    -- ** Response lenses
-    , rwr1FailedRequests
+    , RebootWorkspacesResponse
+    -- * Response Lenses
+    , rrsFailedRequests
+    , rrsStatus
     ) where
 
-import Network.AWS.Data (Object)
-import Network.AWS.Prelude
-import Network.AWS.Request.JSON
-import Network.AWS.WorkSpaces.Types
-import qualified GHC.Exts
-
-newtype RebootWorkspaces = RebootWorkspaces
-    { _rwRebootWorkspaceRequests :: List1 "RebootWorkspaceRequests" RebootRequest
-    } deriving (Eq, Read, Show, Semigroup)
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
+import           Network.AWS.WorkSpaces.Types
+import           Network.AWS.WorkSpaces.Types.Product
 
--- | 'RebootWorkspaces' constructor.
+-- | Contains the inputs for the RebootWorkspaces operation.
 --
--- The fields accessible through corresponding lenses are:
+-- /See:/ 'rebootWorkspaces' smart constructor.
+newtype RebootWorkspaces = RebootWorkspaces'
+    { _rwRebootWorkspaceRequests :: List1 RebootRequest
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'RebootWorkspaces' with the minimum fields required to make a request.
 --
--- * 'rwRebootWorkspaceRequests' @::@ 'NonEmpty' 'RebootRequest'
+-- Use one of the following lenses to modify other fields as desired:
 --
-rebootWorkspaces :: NonEmpty RebootRequest -- ^ 'rwRebootWorkspaceRequests'
-                 -> RebootWorkspaces
-rebootWorkspaces p1 = RebootWorkspaces
-    { _rwRebootWorkspaceRequests = withIso _List1 (const id) p1
+-- * 'rwRebootWorkspaceRequests'
+rebootWorkspaces
+    :: NonEmpty RebootRequest -- ^ 'rwRebootWorkspaceRequests'
+    -> RebootWorkspaces
+rebootWorkspaces pRebootWorkspaceRequests_ =
+    RebootWorkspaces'
+    { _rwRebootWorkspaceRequests = _List1 # pRebootWorkspaceRequests_
     }
 
 -- | An array of structures that specify the WorkSpaces to reboot.
 rwRebootWorkspaceRequests :: Lens' RebootWorkspaces (NonEmpty RebootRequest)
-rwRebootWorkspaceRequests =
-    lens _rwRebootWorkspaceRequests
-        (\s a -> s { _rwRebootWorkspaceRequests = a })
-            . _List1
+rwRebootWorkspaceRequests = lens _rwRebootWorkspaceRequests (\ s a -> s{_rwRebootWorkspaceRequests = a}) . _List1;
 
-newtype RebootWorkspacesResponse = RebootWorkspacesResponse
-    { _rwr1FailedRequests :: List "FailedRequests" FailedWorkspaceChangeRequest
-    } deriving (Eq, Read, Show, Monoid, Semigroup)
+instance AWSRequest RebootWorkspaces where
+        type Sv RebootWorkspaces = WorkSpaces
+        type Rs RebootWorkspaces = RebootWorkspacesResponse
+        request = postJSON
+        response
+          = receiveJSON
+              (\ s h x ->
+                 RebootWorkspacesResponse' <$>
+                   (x .?> "FailedRequests" .!@ mempty) <*>
+                     (pure (fromEnum s)))
 
-instance GHC.Exts.IsList RebootWorkspacesResponse where
-    type Item RebootWorkspacesResponse = FailedWorkspaceChangeRequest
+instance ToHeaders RebootWorkspaces where
+        toHeaders
+          = const
+              (mconcat
+                 ["X-Amz-Target" =#
+                    ("WorkspacesService.RebootWorkspaces" :: ByteString),
+                  "Content-Type" =#
+                    ("application/x-amz-json-1.1" :: ByteString)])
 
-    fromList = RebootWorkspacesResponse . GHC.Exts.fromList
-    toList   = GHC.Exts.toList . _rwr1FailedRequests
+instance ToJSON RebootWorkspaces where
+        toJSON RebootWorkspaces'{..}
+          = object
+              ["RebootWorkspaceRequests" .=
+                 _rwRebootWorkspaceRequests]
 
--- | 'RebootWorkspacesResponse' constructor.
+instance ToPath RebootWorkspaces where
+        toPath = const "/"
+
+instance ToQuery RebootWorkspaces where
+        toQuery = const mempty
+
+-- | Contains the results of the RebootWorkspaces operation.
 --
--- The fields accessible through corresponding lenses are:
+-- /See:/ 'rebootWorkspacesResponse' smart constructor.
+data RebootWorkspacesResponse = RebootWorkspacesResponse'
+    { _rrsFailedRequests :: !(Maybe [FailedWorkspaceChangeRequest])
+    , _rrsStatus         :: !Int
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'RebootWorkspacesResponse' with the minimum fields required to make a request.
 --
--- * 'rwr1FailedRequests' @::@ ['FailedWorkspaceChangeRequest']
+-- Use one of the following lenses to modify other fields as desired:
 --
-rebootWorkspacesResponse :: RebootWorkspacesResponse
-rebootWorkspacesResponse = RebootWorkspacesResponse
-    { _rwr1FailedRequests = mempty
+-- * 'rrsFailedRequests'
+--
+-- * 'rrsStatus'
+rebootWorkspacesResponse
+    :: Int -- ^ 'rrsStatus'
+    -> RebootWorkspacesResponse
+rebootWorkspacesResponse pStatus_ =
+    RebootWorkspacesResponse'
+    { _rrsFailedRequests = Nothing
+    , _rrsStatus = pStatus_
     }
 
 -- | An array of structures that represent any WorkSpaces that could not be
 -- rebooted.
-rwr1FailedRequests :: Lens' RebootWorkspacesResponse [FailedWorkspaceChangeRequest]
-rwr1FailedRequests =
-    lens _rwr1FailedRequests (\s a -> s { _rwr1FailedRequests = a })
-        . _List
-
-instance ToPath RebootWorkspaces where
-    toPath = const "/"
-
-instance ToQuery RebootWorkspaces where
-    toQuery = const mempty
-
-instance ToHeaders RebootWorkspaces
-
-instance ToJSON RebootWorkspaces where
-    toJSON RebootWorkspaces{..} = object
-        [ "RebootWorkspaceRequests" .= _rwRebootWorkspaceRequests
-        ]
-
-instance AWSRequest RebootWorkspaces where
-    type Sv RebootWorkspaces = WorkSpaces
-    type Rs RebootWorkspaces = RebootWorkspacesResponse
-
-    request  = post "RebootWorkspaces"
-    response = jsonResponse
+rrsFailedRequests :: Lens' RebootWorkspacesResponse [FailedWorkspaceChangeRequest]
+rrsFailedRequests = lens _rrsFailedRequests (\ s a -> s{_rrsFailedRequests = a}) . _Default . _Coerce;
 
-instance FromJSON RebootWorkspacesResponse where
-    parseJSON = withObject "RebootWorkspacesResponse" $ \o -> RebootWorkspacesResponse
-        <$> o .:? "FailedRequests" .!= mempty
+-- | The response status code.
+rrsStatus :: Lens' RebootWorkspacesResponse Int
+rrsStatus = lens _rrsStatus (\ s a -> s{_rrsStatus = a});
diff --git a/gen/Network/AWS/WorkSpaces/RebuildWorkspaces.hs b/gen/Network/AWS/WorkSpaces/RebuildWorkspaces.hs
--- a/gen/Network/AWS/WorkSpaces/RebuildWorkspaces.hs
+++ b/gen/Network/AWS/WorkSpaces/RebuildWorkspaces.hs
@@ -1,141 +1,154 @@
-{-# LANGUAGE DataKinds                   #-}
-{-# LANGUAGE DeriveGeneric               #-}
-{-# LANGUAGE FlexibleInstances           #-}
-{-# LANGUAGE GeneralizedNewtypeDeriving  #-}
-{-# LANGUAGE LambdaCase                  #-}
-{-# LANGUAGE NoImplicitPrelude           #-}
-{-# LANGUAGE OverloadedStrings           #-}
-{-# LANGUAGE RecordWildCards             #-}
-{-# LANGUAGE TypeFamilies                #-}
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
 
 {-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
 
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
 -- Module      : Network.AWS.WorkSpaces.RebuildWorkspaces
--- Copyright   : (c) 2013-2014 Brendan Hay <brendan.g.hay@gmail.com>
--- License     : This Source Code Form is subject to the terms of
---               the Mozilla Public License, v. 2.0.
---               A copy of the MPL can be found in the LICENSE file or
---               you can obtain it at http://mozilla.org/MPL/2.0/.
+-- Copyright   : (c) 2013-2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
--- Stability   : experimental
+-- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- | Rebuilds the specified WorkSpaces.
---
--- Rebuilding a WorkSpace is a potentially destructive action that can result
--- in the loss of data. Rebuilding a WorkSpace causes the following to occur:
+-- Rebuilds the specified WorkSpaces.
 --
--- The system is restored to the image of the bundle that the WorkSpace is
--- created from. Any applications that have been installed, or system settings
--- that have been made since the WorkSpace was created will be lost. The data
--- drive (D drive) is re-created from the last automatic snapshot taken of the
--- data drive. The current contents of the data drive are overwritten. Automatic
--- snapshots of the data drive are taken every 12 hours, so the snapshot can be
--- as much as 12 hours old.  To be able to rebuild a WorkSpace, the WorkSpace
--- must have a State of 'AVAILABLE' or 'ERROR'.
+-- Rebuilding a WorkSpace is a potentially destructive action that can
+-- result in the loss of data. Rebuilding a WorkSpace causes the following
+-- to occur:
 --
--- This operation is asynchronous and will return before the WorkSpaces have
--- been completely rebuilt.
+-- -   The system is restored to the image of the bundle that the WorkSpace
+--     is created from. Any applications that have been installed, or
+--     system settings that have been made since the WorkSpace was created
+--     will be lost.
+-- -   The data drive (D drive) is re-created from the last automatic
+--     snapshot taken of the data drive. The current contents of the data
+--     drive are overwritten. Automatic snapshots of the data drive are
+--     taken every 12 hours, so the snapshot can be as much as 12 hours
+--     old.
 --
+-- To be able to rebuild a WorkSpace, the WorkSpace must have a __State__
+-- of 'AVAILABLE' or 'ERROR'.
 --
+-- This operation is asynchronous and will return before the WorkSpaces
+-- have been completely rebuilt.
 --
--- <http://docs.aws.amazon.com/workspaces/latest/devguide/API_RebuildWorkspaces.html>
+-- /See:/ <http://docs.aws.amazon.com/workspaces/latest/devguide/API_RebuildWorkspaces.html AWS API Reference> for RebuildWorkspaces.
 module Network.AWS.WorkSpaces.RebuildWorkspaces
     (
-    -- * Request
-      RebuildWorkspaces
-    -- ** Request constructor
-    , rebuildWorkspaces
-    -- ** Request lenses
+    -- * Creating a Request
+      rebuildWorkspaces
+    , RebuildWorkspaces
+    -- * Request Lenses
     , rwRebuildWorkspaceRequests
 
-    -- * Response
-    , RebuildWorkspacesResponse
-    -- ** Response constructor
+    -- * Destructuring the Response
     , rebuildWorkspacesResponse
-    -- ** Response lenses
-    , rwrFailedRequests
+    , RebuildWorkspacesResponse
+    -- * Response Lenses
+    , rwrsFailedRequests
+    , rwrsStatus
     ) where
 
-import Network.AWS.Data (Object)
-import Network.AWS.Prelude
-import Network.AWS.Request.JSON
-import Network.AWS.WorkSpaces.Types
-import qualified GHC.Exts
-
-newtype RebuildWorkspaces = RebuildWorkspaces
-    { _rwRebuildWorkspaceRequests :: List1 "RebuildWorkspaceRequests" RebuildRequest
-    } deriving (Eq, Read, Show, Semigroup)
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
+import           Network.AWS.WorkSpaces.Types
+import           Network.AWS.WorkSpaces.Types.Product
 
--- | 'RebuildWorkspaces' constructor.
+-- | Contains the inputs for the RebuildWorkspaces operation.
 --
--- The fields accessible through corresponding lenses are:
+-- /See:/ 'rebuildWorkspaces' smart constructor.
+newtype RebuildWorkspaces = RebuildWorkspaces'
+    { _rwRebuildWorkspaceRequests :: List1 RebuildRequest
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'RebuildWorkspaces' with the minimum fields required to make a request.
 --
--- * 'rwRebuildWorkspaceRequests' @::@ 'NonEmpty' 'RebuildRequest'
+-- Use one of the following lenses to modify other fields as desired:
 --
-rebuildWorkspaces :: NonEmpty RebuildRequest -- ^ 'rwRebuildWorkspaceRequests'
-                  -> RebuildWorkspaces
-rebuildWorkspaces p1 = RebuildWorkspaces
-    { _rwRebuildWorkspaceRequests = withIso _List1 (const id) p1
+-- * 'rwRebuildWorkspaceRequests'
+rebuildWorkspaces
+    :: NonEmpty RebuildRequest -- ^ 'rwRebuildWorkspaceRequests'
+    -> RebuildWorkspaces
+rebuildWorkspaces pRebuildWorkspaceRequests_ =
+    RebuildWorkspaces'
+    { _rwRebuildWorkspaceRequests = _List1 # pRebuildWorkspaceRequests_
     }
 
 -- | An array of structures that specify the WorkSpaces to rebuild.
 rwRebuildWorkspaceRequests :: Lens' RebuildWorkspaces (NonEmpty RebuildRequest)
-rwRebuildWorkspaceRequests =
-    lens _rwRebuildWorkspaceRequests
-        (\s a -> s { _rwRebuildWorkspaceRequests = a })
-            . _List1
+rwRebuildWorkspaceRequests = lens _rwRebuildWorkspaceRequests (\ s a -> s{_rwRebuildWorkspaceRequests = a}) . _List1;
 
-newtype RebuildWorkspacesResponse = RebuildWorkspacesResponse
-    { _rwrFailedRequests :: List "FailedRequests" FailedWorkspaceChangeRequest
-    } deriving (Eq, Read, Show, Monoid, Semigroup)
+instance AWSRequest RebuildWorkspaces where
+        type Sv RebuildWorkspaces = WorkSpaces
+        type Rs RebuildWorkspaces = RebuildWorkspacesResponse
+        request = postJSON
+        response
+          = receiveJSON
+              (\ s h x ->
+                 RebuildWorkspacesResponse' <$>
+                   (x .?> "FailedRequests" .!@ mempty) <*>
+                     (pure (fromEnum s)))
 
-instance GHC.Exts.IsList RebuildWorkspacesResponse where
-    type Item RebuildWorkspacesResponse = FailedWorkspaceChangeRequest
+instance ToHeaders RebuildWorkspaces where
+        toHeaders
+          = const
+              (mconcat
+                 ["X-Amz-Target" =#
+                    ("WorkspacesService.RebuildWorkspaces" ::
+                       ByteString),
+                  "Content-Type" =#
+                    ("application/x-amz-json-1.1" :: ByteString)])
 
-    fromList = RebuildWorkspacesResponse . GHC.Exts.fromList
-    toList   = GHC.Exts.toList . _rwrFailedRequests
+instance ToJSON RebuildWorkspaces where
+        toJSON RebuildWorkspaces'{..}
+          = object
+              ["RebuildWorkspaceRequests" .=
+                 _rwRebuildWorkspaceRequests]
 
--- | 'RebuildWorkspacesResponse' constructor.
+instance ToPath RebuildWorkspaces where
+        toPath = const "/"
+
+instance ToQuery RebuildWorkspaces where
+        toQuery = const mempty
+
+-- | Contains the results of the RebuildWorkspaces operation.
 --
--- The fields accessible through corresponding lenses are:
+-- /See:/ 'rebuildWorkspacesResponse' smart constructor.
+data RebuildWorkspacesResponse = RebuildWorkspacesResponse'
+    { _rwrsFailedRequests :: !(Maybe [FailedWorkspaceChangeRequest])
+    , _rwrsStatus         :: !Int
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'RebuildWorkspacesResponse' with the minimum fields required to make a request.
 --
--- * 'rwrFailedRequests' @::@ ['FailedWorkspaceChangeRequest']
+-- Use one of the following lenses to modify other fields as desired:
 --
-rebuildWorkspacesResponse :: RebuildWorkspacesResponse
-rebuildWorkspacesResponse = RebuildWorkspacesResponse
-    { _rwrFailedRequests = mempty
+-- * 'rwrsFailedRequests'
+--
+-- * 'rwrsStatus'
+rebuildWorkspacesResponse
+    :: Int -- ^ 'rwrsStatus'
+    -> RebuildWorkspacesResponse
+rebuildWorkspacesResponse pStatus_ =
+    RebuildWorkspacesResponse'
+    { _rwrsFailedRequests = Nothing
+    , _rwrsStatus = pStatus_
     }
 
 -- | An array of structures that represent any WorkSpaces that could not be
 -- rebuilt.
-rwrFailedRequests :: Lens' RebuildWorkspacesResponse [FailedWorkspaceChangeRequest]
-rwrFailedRequests =
-    lens _rwrFailedRequests (\s a -> s { _rwrFailedRequests = a })
-        . _List
-
-instance ToPath RebuildWorkspaces where
-    toPath = const "/"
-
-instance ToQuery RebuildWorkspaces where
-    toQuery = const mempty
-
-instance ToHeaders RebuildWorkspaces
-
-instance ToJSON RebuildWorkspaces where
-    toJSON RebuildWorkspaces{..} = object
-        [ "RebuildWorkspaceRequests" .= _rwRebuildWorkspaceRequests
-        ]
-
-instance AWSRequest RebuildWorkspaces where
-    type Sv RebuildWorkspaces = WorkSpaces
-    type Rs RebuildWorkspaces = RebuildWorkspacesResponse
-
-    request  = post "RebuildWorkspaces"
-    response = jsonResponse
+rwrsFailedRequests :: Lens' RebuildWorkspacesResponse [FailedWorkspaceChangeRequest]
+rwrsFailedRequests = lens _rwrsFailedRequests (\ s a -> s{_rwrsFailedRequests = a}) . _Default . _Coerce;
 
-instance FromJSON RebuildWorkspacesResponse where
-    parseJSON = withObject "RebuildWorkspacesResponse" $ \o -> RebuildWorkspacesResponse
-        <$> o .:? "FailedRequests" .!= mempty
+-- | The response status code.
+rwrsStatus :: Lens' RebuildWorkspacesResponse Int
+rwrsStatus = lens _rwrsStatus (\ s a -> s{_rwrsStatus = a});
diff --git a/gen/Network/AWS/WorkSpaces/TerminateWorkspaces.hs b/gen/Network/AWS/WorkSpaces/TerminateWorkspaces.hs
--- a/gen/Network/AWS/WorkSpaces/TerminateWorkspaces.hs
+++ b/gen/Network/AWS/WorkSpaces/TerminateWorkspaces.hs
@@ -1,135 +1,145 @@
-{-# LANGUAGE DataKinds                   #-}
-{-# LANGUAGE DeriveGeneric               #-}
-{-# LANGUAGE FlexibleInstances           #-}
-{-# LANGUAGE GeneralizedNewtypeDeriving  #-}
-{-# LANGUAGE LambdaCase                  #-}
-{-# LANGUAGE NoImplicitPrelude           #-}
-{-# LANGUAGE OverloadedStrings           #-}
-{-# LANGUAGE RecordWildCards             #-}
-{-# LANGUAGE TypeFamilies                #-}
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
 
 {-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
 
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
 -- Module      : Network.AWS.WorkSpaces.TerminateWorkspaces
--- Copyright   : (c) 2013-2014 Brendan Hay <brendan.g.hay@gmail.com>
--- License     : This Source Code Form is subject to the terms of
---               the Mozilla Public License, v. 2.0.
---               A copy of the MPL can be found in the LICENSE file or
---               you can obtain it at http://mozilla.org/MPL/2.0/.
+-- Copyright   : (c) 2013-2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
--- Stability   : experimental
+-- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- | Terminates the specified WorkSpaces.
+-- Terminates the specified WorkSpaces.
 --
 -- Terminating a WorkSpace is a permanent action and cannot be undone. The
--- user's data is not maintained and will be destroyed. If you need to archive
--- any user data, contact Amazon Web Services before terminating the WorkSpace.
+-- user\'s data is not maintained and will be destroyed. If you need to
+-- archive any user data, contact Amazon Web Services before terminating
+-- the WorkSpace.
 --
 -- You can terminate a WorkSpace that is in any state except 'SUSPENDED'.
 --
--- This operation is asynchronous and will return before the WorkSpaces have
--- been completely terminated.
---
---
+-- This operation is asynchronous and will return before the WorkSpaces
+-- have been completely terminated.
 --
--- <http://docs.aws.amazon.com/workspaces/latest/devguide/API_TerminateWorkspaces.html>
+-- /See:/ <http://docs.aws.amazon.com/workspaces/latest/devguide/API_TerminateWorkspaces.html AWS API Reference> for TerminateWorkspaces.
 module Network.AWS.WorkSpaces.TerminateWorkspaces
     (
-    -- * Request
-      TerminateWorkspaces
-    -- ** Request constructor
-    , terminateWorkspaces
-    -- ** Request lenses
+    -- * Creating a Request
+      terminateWorkspaces
+    , TerminateWorkspaces
+    -- * Request Lenses
     , twTerminateWorkspaceRequests
 
-    -- * Response
-    , TerminateWorkspacesResponse
-    -- ** Response constructor
+    -- * Destructuring the Response
     , terminateWorkspacesResponse
-    -- ** Response lenses
-    , twrFailedRequests
+    , TerminateWorkspacesResponse
+    -- * Response Lenses
+    , twrsFailedRequests
+    , twrsStatus
     ) where
 
-import Network.AWS.Data (Object)
-import Network.AWS.Prelude
-import Network.AWS.Request.JSON
-import Network.AWS.WorkSpaces.Types
-import qualified GHC.Exts
-
-newtype TerminateWorkspaces = TerminateWorkspaces
-    { _twTerminateWorkspaceRequests :: List1 "TerminateWorkspaceRequests" TerminateRequest
-    } deriving (Eq, Read, Show, Semigroup)
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
+import           Network.AWS.WorkSpaces.Types
+import           Network.AWS.WorkSpaces.Types.Product
 
--- | 'TerminateWorkspaces' constructor.
+-- | Contains the inputs for the TerminateWorkspaces operation.
 --
--- The fields accessible through corresponding lenses are:
+-- /See:/ 'terminateWorkspaces' smart constructor.
+newtype TerminateWorkspaces = TerminateWorkspaces'
+    { _twTerminateWorkspaceRequests :: List1 TerminateRequest
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'TerminateWorkspaces' with the minimum fields required to make a request.
 --
--- * 'twTerminateWorkspaceRequests' @::@ 'NonEmpty' 'TerminateRequest'
+-- Use one of the following lenses to modify other fields as desired:
 --
-terminateWorkspaces :: NonEmpty TerminateRequest -- ^ 'twTerminateWorkspaceRequests'
-                    -> TerminateWorkspaces
-terminateWorkspaces p1 = TerminateWorkspaces
-    { _twTerminateWorkspaceRequests = withIso _List1 (const id) p1
+-- * 'twTerminateWorkspaceRequests'
+terminateWorkspaces
+    :: NonEmpty TerminateRequest -- ^ 'twTerminateWorkspaceRequests'
+    -> TerminateWorkspaces
+terminateWorkspaces pTerminateWorkspaceRequests_ =
+    TerminateWorkspaces'
+    { _twTerminateWorkspaceRequests = _List1 # pTerminateWorkspaceRequests_
     }
 
 -- | An array of structures that specify the WorkSpaces to terminate.
 twTerminateWorkspaceRequests :: Lens' TerminateWorkspaces (NonEmpty TerminateRequest)
-twTerminateWorkspaceRequests =
-    lens _twTerminateWorkspaceRequests
-        (\s a -> s { _twTerminateWorkspaceRequests = a })
-            . _List1
+twTerminateWorkspaceRequests = lens _twTerminateWorkspaceRequests (\ s a -> s{_twTerminateWorkspaceRequests = a}) . _List1;
 
-newtype TerminateWorkspacesResponse = TerminateWorkspacesResponse
-    { _twrFailedRequests :: List "FailedRequests" FailedWorkspaceChangeRequest
-    } deriving (Eq, Read, Show, Monoid, Semigroup)
+instance AWSRequest TerminateWorkspaces where
+        type Sv TerminateWorkspaces = WorkSpaces
+        type Rs TerminateWorkspaces =
+             TerminateWorkspacesResponse
+        request = postJSON
+        response
+          = receiveJSON
+              (\ s h x ->
+                 TerminateWorkspacesResponse' <$>
+                   (x .?> "FailedRequests" .!@ mempty) <*>
+                     (pure (fromEnum s)))
 
-instance GHC.Exts.IsList TerminateWorkspacesResponse where
-    type Item TerminateWorkspacesResponse = FailedWorkspaceChangeRequest
+instance ToHeaders TerminateWorkspaces where
+        toHeaders
+          = const
+              (mconcat
+                 ["X-Amz-Target" =#
+                    ("WorkspacesService.TerminateWorkspaces" ::
+                       ByteString),
+                  "Content-Type" =#
+                    ("application/x-amz-json-1.1" :: ByteString)])
 
-    fromList = TerminateWorkspacesResponse . GHC.Exts.fromList
-    toList   = GHC.Exts.toList . _twrFailedRequests
+instance ToJSON TerminateWorkspaces where
+        toJSON TerminateWorkspaces'{..}
+          = object
+              ["TerminateWorkspaceRequests" .=
+                 _twTerminateWorkspaceRequests]
 
--- | 'TerminateWorkspacesResponse' constructor.
+instance ToPath TerminateWorkspaces where
+        toPath = const "/"
+
+instance ToQuery TerminateWorkspaces where
+        toQuery = const mempty
+
+-- | Contains the results of the TerminateWorkspaces operation.
 --
--- The fields accessible through corresponding lenses are:
+-- /See:/ 'terminateWorkspacesResponse' smart constructor.
+data TerminateWorkspacesResponse = TerminateWorkspacesResponse'
+    { _twrsFailedRequests :: !(Maybe [FailedWorkspaceChangeRequest])
+    , _twrsStatus         :: !Int
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'TerminateWorkspacesResponse' with the minimum fields required to make a request.
 --
--- * 'twrFailedRequests' @::@ ['FailedWorkspaceChangeRequest']
+-- Use one of the following lenses to modify other fields as desired:
 --
-terminateWorkspacesResponse :: TerminateWorkspacesResponse
-terminateWorkspacesResponse = TerminateWorkspacesResponse
-    { _twrFailedRequests = mempty
+-- * 'twrsFailedRequests'
+--
+-- * 'twrsStatus'
+terminateWorkspacesResponse
+    :: Int -- ^ 'twrsStatus'
+    -> TerminateWorkspacesResponse
+terminateWorkspacesResponse pStatus_ =
+    TerminateWorkspacesResponse'
+    { _twrsFailedRequests = Nothing
+    , _twrsStatus = pStatus_
     }
 
 -- | An array of structures that represent any WorkSpaces that could not be
 -- terminated.
-twrFailedRequests :: Lens' TerminateWorkspacesResponse [FailedWorkspaceChangeRequest]
-twrFailedRequests =
-    lens _twrFailedRequests (\s a -> s { _twrFailedRequests = a })
-        . _List
-
-instance ToPath TerminateWorkspaces where
-    toPath = const "/"
-
-instance ToQuery TerminateWorkspaces where
-    toQuery = const mempty
-
-instance ToHeaders TerminateWorkspaces
-
-instance ToJSON TerminateWorkspaces where
-    toJSON TerminateWorkspaces{..} = object
-        [ "TerminateWorkspaceRequests" .= _twTerminateWorkspaceRequests
-        ]
-
-instance AWSRequest TerminateWorkspaces where
-    type Sv TerminateWorkspaces = WorkSpaces
-    type Rs TerminateWorkspaces = TerminateWorkspacesResponse
-
-    request  = post "TerminateWorkspaces"
-    response = jsonResponse
+twrsFailedRequests :: Lens' TerminateWorkspacesResponse [FailedWorkspaceChangeRequest]
+twrsFailedRequests = lens _twrsFailedRequests (\ s a -> s{_twrsFailedRequests = a}) . _Default . _Coerce;
 
-instance FromJSON TerminateWorkspacesResponse where
-    parseJSON = withObject "TerminateWorkspacesResponse" $ \o -> TerminateWorkspacesResponse
-        <$> o .:? "FailedRequests" .!= mempty
+-- | The response status code.
+twrsStatus :: Lens' TerminateWorkspacesResponse Int
+twrsStatus = lens _twrsStatus (\ s a -> s{_twrsStatus = a});
diff --git a/gen/Network/AWS/WorkSpaces/Types.hs b/gen/Network/AWS/WorkSpaces/Types.hs
--- a/gen/Network/AWS/WorkSpaces/Types.hs
+++ b/gen/Network/AWS/WorkSpaces/Types.hs
@@ -1,1047 +1,183 @@
-{-# LANGUAGE DataKinds                   #-}
-{-# LANGUAGE DeriveGeneric               #-}
-{-# LANGUAGE FlexibleInstances           #-}
-{-# LANGUAGE GeneralizedNewtypeDeriving  #-}
-{-# LANGUAGE LambdaCase                  #-}
-{-# LANGUAGE NoImplicitPrelude           #-}
-{-# LANGUAGE OverloadedStrings           #-}
-{-# LANGUAGE RecordWildCards             #-}
-{-# LANGUAGE TypeFamilies                #-}
-{-# LANGUAGE ViewPatterns                #-}
-
-{-# OPTIONS_GHC -fno-warn-unused-imports #-}
-
--- Module      : Network.AWS.WorkSpaces.Types
--- Copyright   : (c) 2013-2014 Brendan Hay <brendan.g.hay@gmail.com>
--- License     : This Source Code Form is subject to the terms of
---               the Mozilla Public License, v. 2.0.
---               A copy of the MPL can be found in the LICENSE file or
---               you can obtain it at http://mozilla.org/MPL/2.0/.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
--- Stability   : experimental
--- Portability : non-portable (GHC extensions)
---
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
-module Network.AWS.WorkSpaces.Types
-    (
-    -- * Service
-      WorkSpaces
-    -- ** Error
-    , JSONError
-
-    -- * WorkspaceRequest
-    , WorkspaceRequest
-    , workspaceRequest
-    , wBundleId
-    , wDirectoryId
-    , wUserName
-
-    -- * WorkspaceDirectory
-    , WorkspaceDirectory
-    , workspaceDirectory
-    , wdAlias
-    , wdCustomerUserName
-    , wdDirectoryId
-    , wdDirectoryName
-    , wdDirectoryType
-    , wdDnsIpAddresses
-    , wdIamRoleId
-    , wdRegistrationCode
-    , wdState
-    , wdSubnetIds
-    , wdWorkspaceCreationProperties
-    , wdWorkspaceSecurityGroupId
-
-    -- * Compute
-    , Compute (..)
-
-    -- * Workspace
-    , Workspace
-    , workspace
-    , w1BundleId
-    , w1DirectoryId
-    , w1ErrorCode
-    , w1ErrorMessage
-    , w1IpAddress
-    , w1State
-    , w1SubnetId
-    , w1UserName
-    , w1WorkspaceId
-
-    -- * RebuildRequest
-    , RebuildRequest
-    , rebuildRequest
-    , rWorkspaceId
-
-    -- * FailedCreateWorkspaceRequest
-    , FailedCreateWorkspaceRequest
-    , failedCreateWorkspaceRequest
-    , fcwErrorCode
-    , fcwErrorMessage
-    , fcwWorkspaceRequest
-
-    -- * WorkspaceDirectoryState
-    , WorkspaceDirectoryState (..)
-
-    -- * FailedWorkspaceChangeRequest
-    , FailedWorkspaceChangeRequest
-    , failedWorkspaceChangeRequest
-    , fwcErrorCode
-    , fwcErrorMessage
-    , fwcWorkspaceId
-
-    -- * WorkspaceDirectoryType
-    , WorkspaceDirectoryType (..)
-
-    -- * WorkspaceState
-    , WorkspaceState (..)
-
-    -- * ComputeType
-    , ComputeType
-    , computeType
-    , ctName
-
-    -- * RebootRequest
-    , RebootRequest
-    , rebootRequest
-    , r1WorkspaceId
-
-    -- * UserStorage
-    , UserStorage
-    , userStorage
-    , usCapacity
-
-    -- * TerminateRequest
-    , TerminateRequest
-    , terminateRequest
-    , tWorkspaceId
-
-    -- * DefaultWorkspaceCreationProperties
-    , DefaultWorkspaceCreationProperties
-    , defaultWorkspaceCreationProperties
-    , dwcpCustomSecurityGroupId
-    , dwcpDefaultOu
-    , dwcpEnableInternetAccess
-    , dwcpEnableWorkDocs
-    , dwcpUserEnabledAsLocalAdministrator
-
-    -- * WorkspaceBundle
-    , WorkspaceBundle
-    , workspaceBundle
-    , wbBundleId
-    , wbComputeType
-    , wbDescription
-    , wbName
-    , wbOwner
-    , wbUserStorage
-    ) where
-
-import Network.AWS.Prelude
-import Network.AWS.Signing
-import qualified GHC.Exts
-
--- | Version @2015-04-08@ of the Amazon WorkSpaces service.
-data WorkSpaces
-
-instance AWSService WorkSpaces where
-    type Sg WorkSpaces = V4
-    type Er WorkSpaces = JSONError
-
-    service = service'
-      where
-        service' :: Service WorkSpaces
-        service' = Service
-            { _svcAbbrev       = "WorkSpaces"
-            , _svcPrefix       = "workspaces"
-            , _svcVersion      = "2015-04-08"
-            , _svcTargetPrefix = Just "WorkspacesService"
-            , _svcJSONVersion  = Just "1.1"
-            , _svcHandle       = handle
-            , _svcRetry        = retry
-            }
-
-        handle :: Status
-               -> Maybe (LazyByteString -> ServiceError JSONError)
-        handle = jsonError statusSuccess service'
-
-        retry :: Retry WorkSpaces
-        retry = Exponential
-            { _retryBase     = 0.05
-            , _retryGrowth   = 2
-            , _retryAttempts = 5
-            , _retryCheck    = check
-            }
-
-        check :: Status
-              -> JSONError
-              -> Bool
-        check (statusCode -> s) (awsErrorCode -> e)
-            | s == 500  = True -- General Server Error
-            | s == 509  = True -- Limit Exceeded
-            | s == 503  = True -- Service Unavailable
-            | otherwise = False
-
-data WorkspaceRequest = WorkspaceRequest
-    { _wBundleId    :: Text
-    , _wDirectoryId :: Text
-    , _wUserName    :: Text
-    } deriving (Eq, Ord, Read, Show)
-
--- | 'WorkspaceRequest' constructor.
---
--- The fields accessible through corresponding lenses are:
---
--- * 'wBundleId' @::@ 'Text'
---
--- * 'wDirectoryId' @::@ 'Text'
---
--- * 'wUserName' @::@ 'Text'
---
-workspaceRequest :: Text -- ^ 'wDirectoryId'
-                 -> Text -- ^ 'wUserName'
-                 -> Text -- ^ 'wBundleId'
-                 -> WorkspaceRequest
-workspaceRequest p1 p2 p3 = WorkspaceRequest
-    { _wDirectoryId = p1
-    , _wUserName    = p2
-    , _wBundleId    = p3
-    }
-
--- | The identifier of the bundle to create the WorkSpace from. You can use the 'DescribeWorkspaceBundles' operation to obtain a list of the bundles that are available.
-wBundleId :: Lens' WorkspaceRequest Text
-wBundleId = lens _wBundleId (\s a -> s { _wBundleId = a })
-
--- | The identifier of the AWS Directory Service directory to create the WorkSpace
--- in. You can use the 'DescribeWorkspaceDirectories' operation to obtain a list
--- of the directories that are available.
-wDirectoryId :: Lens' WorkspaceRequest Text
-wDirectoryId = lens _wDirectoryId (\s a -> s { _wDirectoryId = a })
-
--- | The username that the WorkSpace is assigned to. This username must exist in
--- the AWS Directory Service directory specified by the 'DirectoryId' member.
-wUserName :: Lens' WorkspaceRequest Text
-wUserName = lens _wUserName (\s a -> s { _wUserName = a })
-
-instance FromJSON WorkspaceRequest where
-    parseJSON = withObject "WorkspaceRequest" $ \o -> WorkspaceRequest
-        <$> o .:  "BundleId"
-        <*> o .:  "DirectoryId"
-        <*> o .:  "UserName"
-
-instance ToJSON WorkspaceRequest where
-    toJSON WorkspaceRequest{..} = object
-        [ "DirectoryId" .= _wDirectoryId
-        , "UserName"    .= _wUserName
-        , "BundleId"    .= _wBundleId
-        ]
-
-data WorkspaceDirectory = WorkspaceDirectory
-    { _wdAlias                       :: Maybe Text
-    , _wdCustomerUserName            :: Maybe Text
-    , _wdDirectoryId                 :: Maybe Text
-    , _wdDirectoryName               :: Maybe Text
-    , _wdDirectoryType               :: Maybe WorkspaceDirectoryType
-    , _wdDnsIpAddresses              :: List "DnsIpAddresses" Text
-    , _wdIamRoleId                   :: Maybe Text
-    , _wdRegistrationCode            :: Maybe Text
-    , _wdState                       :: Maybe WorkspaceDirectoryState
-    , _wdSubnetIds                   :: List "SubnetIds" Text
-    , _wdWorkspaceCreationProperties :: Maybe DefaultWorkspaceCreationProperties
-    , _wdWorkspaceSecurityGroupId    :: Maybe Text
-    } deriving (Eq, Read, Show)
-
--- | 'WorkspaceDirectory' constructor.
---
--- The fields accessible through corresponding lenses are:
---
--- * 'wdAlias' @::@ 'Maybe' 'Text'
---
--- * 'wdCustomerUserName' @::@ 'Maybe' 'Text'
---
--- * 'wdDirectoryId' @::@ 'Maybe' 'Text'
---
--- * 'wdDirectoryName' @::@ 'Maybe' 'Text'
---
--- * 'wdDirectoryType' @::@ 'Maybe' 'WorkspaceDirectoryType'
---
--- * 'wdDnsIpAddresses' @::@ ['Text']
---
--- * 'wdIamRoleId' @::@ 'Maybe' 'Text'
---
--- * 'wdRegistrationCode' @::@ 'Maybe' 'Text'
---
--- * 'wdState' @::@ 'Maybe' 'WorkspaceDirectoryState'
---
--- * 'wdSubnetIds' @::@ ['Text']
---
--- * 'wdWorkspaceCreationProperties' @::@ 'Maybe' 'DefaultWorkspaceCreationProperties'
---
--- * 'wdWorkspaceSecurityGroupId' @::@ 'Maybe' 'Text'
---
-workspaceDirectory :: WorkspaceDirectory
-workspaceDirectory = WorkspaceDirectory
-    { _wdDirectoryId                 = Nothing
-    , _wdAlias                       = Nothing
-    , _wdDirectoryName               = Nothing
-    , _wdRegistrationCode            = Nothing
-    , _wdSubnetIds                   = mempty
-    , _wdDnsIpAddresses              = mempty
-    , _wdCustomerUserName            = Nothing
-    , _wdIamRoleId                   = Nothing
-    , _wdDirectoryType               = Nothing
-    , _wdWorkspaceSecurityGroupId    = Nothing
-    , _wdState                       = Nothing
-    , _wdWorkspaceCreationProperties = Nothing
-    }
-
--- | The directory alias.
-wdAlias :: Lens' WorkspaceDirectory (Maybe Text)
-wdAlias = lens _wdAlias (\s a -> s { _wdAlias = a })
-
--- | The user name for the service account.
-wdCustomerUserName :: Lens' WorkspaceDirectory (Maybe Text)
-wdCustomerUserName =
-    lens _wdCustomerUserName (\s a -> s { _wdCustomerUserName = a })
-
--- | The directory identifier.
-wdDirectoryId :: Lens' WorkspaceDirectory (Maybe Text)
-wdDirectoryId = lens _wdDirectoryId (\s a -> s { _wdDirectoryId = a })
-
--- | The name of the directory.
-wdDirectoryName :: Lens' WorkspaceDirectory (Maybe Text)
-wdDirectoryName = lens _wdDirectoryName (\s a -> s { _wdDirectoryName = a })
-
--- | The directory type.
-wdDirectoryType :: Lens' WorkspaceDirectory (Maybe WorkspaceDirectoryType)
-wdDirectoryType = lens _wdDirectoryType (\s a -> s { _wdDirectoryType = a })
-
--- | An array of strings that contains the IP addresses of the DNS servers for the
--- directory.
-wdDnsIpAddresses :: Lens' WorkspaceDirectory [Text]
-wdDnsIpAddresses = lens _wdDnsIpAddresses (\s a -> s { _wdDnsIpAddresses = a }) . _List
-
--- | The identifier of the IAM role. This is the role that allows Amazon
--- WorkSpaces to make calls to other services, such as Amazon EC2, on your
--- behalf.
-wdIamRoleId :: Lens' WorkspaceDirectory (Maybe Text)
-wdIamRoleId = lens _wdIamRoleId (\s a -> s { _wdIamRoleId = a })
-
--- | The registration code for the directory. This is the code that users enter in
--- their Amazon WorkSpaces client application to connect to the directory.
-wdRegistrationCode :: Lens' WorkspaceDirectory (Maybe Text)
-wdRegistrationCode =
-    lens _wdRegistrationCode (\s a -> s { _wdRegistrationCode = a })
-
--- | The state of the directory's registration with Amazon WorkSpaces
-wdState :: Lens' WorkspaceDirectory (Maybe WorkspaceDirectoryState)
-wdState = lens _wdState (\s a -> s { _wdState = a })
-
--- | An array of strings that contains the identifiers of the subnets used with
--- the directory.
-wdSubnetIds :: Lens' WorkspaceDirectory [Text]
-wdSubnetIds = lens _wdSubnetIds (\s a -> s { _wdSubnetIds = a }) . _List
-
--- | A structure that specifies the default creation properties for all WorkSpaces
--- in the directory.
-wdWorkspaceCreationProperties :: Lens' WorkspaceDirectory (Maybe DefaultWorkspaceCreationProperties)
-wdWorkspaceCreationProperties =
-    lens _wdWorkspaceCreationProperties
-        (\s a -> s { _wdWorkspaceCreationProperties = a })
-
--- | The identifier of the security group that is assigned to new WorkSpaces.
-wdWorkspaceSecurityGroupId :: Lens' WorkspaceDirectory (Maybe Text)
-wdWorkspaceSecurityGroupId =
-    lens _wdWorkspaceSecurityGroupId
-        (\s a -> s { _wdWorkspaceSecurityGroupId = a })
-
-instance FromJSON WorkspaceDirectory where
-    parseJSON = withObject "WorkspaceDirectory" $ \o -> WorkspaceDirectory
-        <$> o .:? "Alias"
-        <*> o .:? "CustomerUserName"
-        <*> o .:? "DirectoryId"
-        <*> o .:? "DirectoryName"
-        <*> o .:? "DirectoryType"
-        <*> o .:? "DnsIpAddresses" .!= mempty
-        <*> o .:? "IamRoleId"
-        <*> o .:? "RegistrationCode"
-        <*> o .:? "State"
-        <*> o .:? "SubnetIds" .!= mempty
-        <*> o .:? "WorkspaceCreationProperties"
-        <*> o .:? "WorkspaceSecurityGroupId"
-
-instance ToJSON WorkspaceDirectory where
-    toJSON WorkspaceDirectory{..} = object
-        [ "DirectoryId"                 .= _wdDirectoryId
-        , "Alias"                       .= _wdAlias
-        , "DirectoryName"               .= _wdDirectoryName
-        , "RegistrationCode"            .= _wdRegistrationCode
-        , "SubnetIds"                   .= _wdSubnetIds
-        , "DnsIpAddresses"              .= _wdDnsIpAddresses
-        , "CustomerUserName"            .= _wdCustomerUserName
-        , "IamRoleId"                   .= _wdIamRoleId
-        , "DirectoryType"               .= _wdDirectoryType
-        , "WorkspaceSecurityGroupId"    .= _wdWorkspaceSecurityGroupId
-        , "State"                       .= _wdState
-        , "WorkspaceCreationProperties" .= _wdWorkspaceCreationProperties
-        ]
-
-data Compute
-    = Performance -- ^ PERFORMANCE
-    | Standard    -- ^ STANDARD
-    | Value       -- ^ VALUE
-      deriving (Eq, Ord, Read, Show, Generic, Enum)
-
-instance Hashable Compute
-
-instance FromText Compute where
-    parser = takeLowerText >>= \case
-        "performance" -> pure Performance
-        "standard"    -> pure Standard
-        "value"       -> pure Value
-        e             -> fail $
-            "Failure parsing Compute from " ++ show e
-
-instance ToText Compute where
-    toText = \case
-        Performance -> "PERFORMANCE"
-        Standard    -> "STANDARD"
-        Value       -> "VALUE"
-
-instance ToByteString Compute
-instance ToHeader     Compute
-instance ToQuery      Compute
-
-instance FromJSON Compute where
-    parseJSON = parseJSONText "Compute"
-
-instance ToJSON Compute where
-    toJSON = toJSONText
-
-data Workspace = Workspace
-    { _w1BundleId     :: Maybe Text
-    , _w1DirectoryId  :: Maybe Text
-    , _w1ErrorCode    :: Maybe Text
-    , _w1ErrorMessage :: Maybe Text
-    , _w1IpAddress    :: Maybe Text
-    , _w1State        :: Maybe WorkspaceState
-    , _w1SubnetId     :: Maybe Text
-    , _w1UserName     :: Maybe Text
-    , _w1WorkspaceId  :: Maybe Text
-    } deriving (Eq, Read, Show)
-
--- | 'Workspace' constructor.
---
--- The fields accessible through corresponding lenses are:
---
--- * 'w1BundleId' @::@ 'Maybe' 'Text'
---
--- * 'w1DirectoryId' @::@ 'Maybe' 'Text'
---
--- * 'w1ErrorCode' @::@ 'Maybe' 'Text'
---
--- * 'w1ErrorMessage' @::@ 'Maybe' 'Text'
---
--- * 'w1IpAddress' @::@ 'Maybe' 'Text'
---
--- * 'w1State' @::@ 'Maybe' 'WorkspaceState'
---
--- * 'w1SubnetId' @::@ 'Maybe' 'Text'
---
--- * 'w1UserName' @::@ 'Maybe' 'Text'
---
--- * 'w1WorkspaceId' @::@ 'Maybe' 'Text'
---
-workspace :: Workspace
-workspace = Workspace
-    { _w1WorkspaceId  = Nothing
-    , _w1DirectoryId  = Nothing
-    , _w1UserName     = Nothing
-    , _w1IpAddress    = Nothing
-    , _w1State        = Nothing
-    , _w1BundleId     = Nothing
-    , _w1SubnetId     = Nothing
-    , _w1ErrorMessage = Nothing
-    , _w1ErrorCode    = Nothing
-    }
-
--- | The identifier of the bundle that the WorkSpace was created from.
-w1BundleId :: Lens' Workspace (Maybe Text)
-w1BundleId = lens _w1BundleId (\s a -> s { _w1BundleId = a })
-
--- | The identifier of the AWS Directory Service directory that the WorkSpace
--- belongs to.
-w1DirectoryId :: Lens' Workspace (Maybe Text)
-w1DirectoryId = lens _w1DirectoryId (\s a -> s { _w1DirectoryId = a })
-
--- | If the WorkSpace could not be created, this contains the error code.
-w1ErrorCode :: Lens' Workspace (Maybe Text)
-w1ErrorCode = lens _w1ErrorCode (\s a -> s { _w1ErrorCode = a })
-
--- | If the WorkSpace could not be created, this contains a textual error message
--- that describes the failure.
-w1ErrorMessage :: Lens' Workspace (Maybe Text)
-w1ErrorMessage = lens _w1ErrorMessage (\s a -> s { _w1ErrorMessage = a })
-
--- | The IP address of the WorkSpace.
-w1IpAddress :: Lens' Workspace (Maybe Text)
-w1IpAddress = lens _w1IpAddress (\s a -> s { _w1IpAddress = a })
-
--- | The operational state of the WorkSpace.
-w1State :: Lens' Workspace (Maybe WorkspaceState)
-w1State = lens _w1State (\s a -> s { _w1State = a })
-
--- | The identifier of the subnet that the WorkSpace is in.
-w1SubnetId :: Lens' Workspace (Maybe Text)
-w1SubnetId = lens _w1SubnetId (\s a -> s { _w1SubnetId = a })
-
--- | The user that the WorkSpace is assigned to.
-w1UserName :: Lens' Workspace (Maybe Text)
-w1UserName = lens _w1UserName (\s a -> s { _w1UserName = a })
-
--- | The identifier of the WorkSpace.
-w1WorkspaceId :: Lens' Workspace (Maybe Text)
-w1WorkspaceId = lens _w1WorkspaceId (\s a -> s { _w1WorkspaceId = a })
-
-instance FromJSON Workspace where
-    parseJSON = withObject "Workspace" $ \o -> Workspace
-        <$> o .:? "BundleId"
-        <*> o .:? "DirectoryId"
-        <*> o .:? "ErrorCode"
-        <*> o .:? "ErrorMessage"
-        <*> o .:? "IpAddress"
-        <*> o .:? "State"
-        <*> o .:? "SubnetId"
-        <*> o .:? "UserName"
-        <*> o .:? "WorkspaceId"
-
-instance ToJSON Workspace where
-    toJSON Workspace{..} = object
-        [ "WorkspaceId"  .= _w1WorkspaceId
-        , "DirectoryId"  .= _w1DirectoryId
-        , "UserName"     .= _w1UserName
-        , "IpAddress"    .= _w1IpAddress
-        , "State"        .= _w1State
-        , "BundleId"     .= _w1BundleId
-        , "SubnetId"     .= _w1SubnetId
-        , "ErrorMessage" .= _w1ErrorMessage
-        , "ErrorCode"    .= _w1ErrorCode
-        ]
-
-newtype RebuildRequest = RebuildRequest
-    { _rWorkspaceId :: Text
-    } deriving (Eq, Ord, Read, Show, Monoid, IsString)
-
--- | 'RebuildRequest' constructor.
---
--- The fields accessible through corresponding lenses are:
---
--- * 'rWorkspaceId' @::@ 'Text'
---
-rebuildRequest :: Text -- ^ 'rWorkspaceId'
-               -> RebuildRequest
-rebuildRequest p1 = RebuildRequest
-    { _rWorkspaceId = p1
-    }
-
--- | The identifier of the WorkSpace to rebuild.
-rWorkspaceId :: Lens' RebuildRequest Text
-rWorkspaceId = lens _rWorkspaceId (\s a -> s { _rWorkspaceId = a })
-
-instance FromJSON RebuildRequest where
-    parseJSON = withObject "RebuildRequest" $ \o -> RebuildRequest
-        <$> o .:  "WorkspaceId"
-
-instance ToJSON RebuildRequest where
-    toJSON RebuildRequest{..} = object
-        [ "WorkspaceId" .= _rWorkspaceId
-        ]
-
-data FailedCreateWorkspaceRequest = FailedCreateWorkspaceRequest
-    { _fcwErrorCode        :: Maybe Text
-    , _fcwErrorMessage     :: Maybe Text
-    , _fcwWorkspaceRequest :: Maybe WorkspaceRequest
-    } deriving (Eq, Read, Show)
-
--- | 'FailedCreateWorkspaceRequest' constructor.
---
--- The fields accessible through corresponding lenses are:
---
--- * 'fcwErrorCode' @::@ 'Maybe' 'Text'
---
--- * 'fcwErrorMessage' @::@ 'Maybe' 'Text'
---
--- * 'fcwWorkspaceRequest' @::@ 'Maybe' 'WorkspaceRequest'
---
-failedCreateWorkspaceRequest :: FailedCreateWorkspaceRequest
-failedCreateWorkspaceRequest = FailedCreateWorkspaceRequest
-    { _fcwWorkspaceRequest = Nothing
-    , _fcwErrorCode        = Nothing
-    , _fcwErrorMessage     = Nothing
-    }
-
--- | The error code.
-fcwErrorCode :: Lens' FailedCreateWorkspaceRequest (Maybe Text)
-fcwErrorCode = lens _fcwErrorCode (\s a -> s { _fcwErrorCode = a })
-
--- | The textual error message.
-fcwErrorMessage :: Lens' FailedCreateWorkspaceRequest (Maybe Text)
-fcwErrorMessage = lens _fcwErrorMessage (\s a -> s { _fcwErrorMessage = a })
-
--- | A 'WorkspaceRequest' object that contains the information about the WorkSpace
--- that could not be created.
-fcwWorkspaceRequest :: Lens' FailedCreateWorkspaceRequest (Maybe WorkspaceRequest)
-fcwWorkspaceRequest =
-    lens _fcwWorkspaceRequest (\s a -> s { _fcwWorkspaceRequest = a })
-
-instance FromJSON FailedCreateWorkspaceRequest where
-    parseJSON = withObject "FailedCreateWorkspaceRequest" $ \o -> FailedCreateWorkspaceRequest
-        <$> o .:? "ErrorCode"
-        <*> o .:? "ErrorMessage"
-        <*> o .:? "WorkspaceRequest"
-
-instance ToJSON FailedCreateWorkspaceRequest where
-    toJSON FailedCreateWorkspaceRequest{..} = object
-        [ "WorkspaceRequest" .= _fcwWorkspaceRequest
-        , "ErrorCode"        .= _fcwErrorCode
-        , "ErrorMessage"     .= _fcwErrorMessage
-        ]
-
-data WorkspaceDirectoryState
-    = Deregistered  -- ^ DEREGISTERED
-    | Deregistering -- ^ DEREGISTERING
-    | Error         -- ^ ERROR
-    | Registered    -- ^ REGISTERED
-    | Registering   -- ^ REGISTERING
-      deriving (Eq, Ord, Read, Show, Generic, Enum)
-
-instance Hashable WorkspaceDirectoryState
-
-instance FromText WorkspaceDirectoryState where
-    parser = takeLowerText >>= \case
-        "deregistered"  -> pure Deregistered
-        "deregistering" -> pure Deregistering
-        "error"         -> pure Error
-        "registered"    -> pure Registered
-        "registering"   -> pure Registering
-        e               -> fail $
-            "Failure parsing WorkspaceDirectoryState from " ++ show e
-
-instance ToText WorkspaceDirectoryState where
-    toText = \case
-        Deregistered  -> "DEREGISTERED"
-        Deregistering -> "DEREGISTERING"
-        Error         -> "ERROR"
-        Registered    -> "REGISTERED"
-        Registering   -> "REGISTERING"
-
-instance ToByteString WorkspaceDirectoryState
-instance ToHeader     WorkspaceDirectoryState
-instance ToQuery      WorkspaceDirectoryState
-
-instance FromJSON WorkspaceDirectoryState where
-    parseJSON = parseJSONText "WorkspaceDirectoryState"
-
-instance ToJSON WorkspaceDirectoryState where
-    toJSON = toJSONText
-
-data FailedWorkspaceChangeRequest = FailedWorkspaceChangeRequest
-    { _fwcErrorCode    :: Maybe Text
-    , _fwcErrorMessage :: Maybe Text
-    , _fwcWorkspaceId  :: Maybe Text
-    } deriving (Eq, Ord, Read, Show)
-
--- | 'FailedWorkspaceChangeRequest' constructor.
---
--- The fields accessible through corresponding lenses are:
---
--- * 'fwcErrorCode' @::@ 'Maybe' 'Text'
---
--- * 'fwcErrorMessage' @::@ 'Maybe' 'Text'
---
--- * 'fwcWorkspaceId' @::@ 'Maybe' 'Text'
---
-failedWorkspaceChangeRequest :: FailedWorkspaceChangeRequest
-failedWorkspaceChangeRequest = FailedWorkspaceChangeRequest
-    { _fwcWorkspaceId  = Nothing
-    , _fwcErrorCode    = Nothing
-    , _fwcErrorMessage = Nothing
-    }
-
--- | The error code.
-fwcErrorCode :: Lens' FailedWorkspaceChangeRequest (Maybe Text)
-fwcErrorCode = lens _fwcErrorCode (\s a -> s { _fwcErrorCode = a })
-
--- | The textual error message.
-fwcErrorMessage :: Lens' FailedWorkspaceChangeRequest (Maybe Text)
-fwcErrorMessage = lens _fwcErrorMessage (\s a -> s { _fwcErrorMessage = a })
-
--- | The identifier of the WorkSpace.
-fwcWorkspaceId :: Lens' FailedWorkspaceChangeRequest (Maybe Text)
-fwcWorkspaceId = lens _fwcWorkspaceId (\s a -> s { _fwcWorkspaceId = a })
-
-instance FromJSON FailedWorkspaceChangeRequest where
-    parseJSON = withObject "FailedWorkspaceChangeRequest" $ \o -> FailedWorkspaceChangeRequest
-        <$> o .:? "ErrorCode"
-        <*> o .:? "ErrorMessage"
-        <*> o .:? "WorkspaceId"
-
-instance ToJSON FailedWorkspaceChangeRequest where
-    toJSON FailedWorkspaceChangeRequest{..} = object
-        [ "WorkspaceId"  .= _fwcWorkspaceId
-        , "ErrorCode"    .= _fwcErrorCode
-        , "ErrorMessage" .= _fwcErrorMessage
-        ]
-
-data WorkspaceDirectoryType
-    = AdConnector -- ^ AD_CONNECTOR
-    | SimpleAd    -- ^ SIMPLE_AD
-      deriving (Eq, Ord, Read, Show, Generic, Enum)
-
-instance Hashable WorkspaceDirectoryType
-
-instance FromText WorkspaceDirectoryType where
-    parser = takeLowerText >>= \case
-        "ad_connector" -> pure AdConnector
-        "simple_ad"    -> pure SimpleAd
-        e              -> fail $
-            "Failure parsing WorkspaceDirectoryType from " ++ show e
-
-instance ToText WorkspaceDirectoryType where
-    toText = \case
-        AdConnector -> "AD_CONNECTOR"
-        SimpleAd    -> "SIMPLE_AD"
-
-instance ToByteString WorkspaceDirectoryType
-instance ToHeader     WorkspaceDirectoryType
-instance ToQuery      WorkspaceDirectoryType
-
-instance FromJSON WorkspaceDirectoryType where
-    parseJSON = parseJSONText "WorkspaceDirectoryType"
-
-instance ToJSON WorkspaceDirectoryType where
-    toJSON = toJSONText
-
-data WorkspaceState
-    = WSAvailable   -- ^ AVAILABLE
-    | WSError       -- ^ ERROR
-    | WSImpaired    -- ^ IMPAIRED
-    | WSPending     -- ^ PENDING
-    | WSRebooting   -- ^ REBOOTING
-    | WSRebuilding  -- ^ REBUILDING
-    | WSSuspended   -- ^ SUSPENDED
-    | WSTerminated  -- ^ TERMINATED
-    | WSTerminating -- ^ TERMINATING
-    | WSUnhealthy   -- ^ UNHEALTHY
-      deriving (Eq, Ord, Read, Show, Generic, Enum)
-
-instance Hashable WorkspaceState
-
-instance FromText WorkspaceState where
-    parser = takeLowerText >>= \case
-        "available"   -> pure WSAvailable
-        "error"       -> pure WSError
-        "impaired"    -> pure WSImpaired
-        "pending"     -> pure WSPending
-        "rebooting"   -> pure WSRebooting
-        "rebuilding"  -> pure WSRebuilding
-        "suspended"   -> pure WSSuspended
-        "terminated"  -> pure WSTerminated
-        "terminating" -> pure WSTerminating
-        "unhealthy"   -> pure WSUnhealthy
-        e             -> fail $
-            "Failure parsing WorkspaceState from " ++ show e
-
-instance ToText WorkspaceState where
-    toText = \case
-        WSAvailable   -> "AVAILABLE"
-        WSError       -> "ERROR"
-        WSImpaired    -> "IMPAIRED"
-        WSPending     -> "PENDING"
-        WSRebooting   -> "REBOOTING"
-        WSRebuilding  -> "REBUILDING"
-        WSSuspended   -> "SUSPENDED"
-        WSTerminated  -> "TERMINATED"
-        WSTerminating -> "TERMINATING"
-        WSUnhealthy   -> "UNHEALTHY"
-
-instance ToByteString WorkspaceState
-instance ToHeader     WorkspaceState
-instance ToQuery      WorkspaceState
-
-instance FromJSON WorkspaceState where
-    parseJSON = parseJSONText "WorkspaceState"
-
-instance ToJSON WorkspaceState where
-    toJSON = toJSONText
-
-newtype ComputeType = ComputeType
-    { _ctName :: Maybe Compute
-    } deriving (Eq, Read, Show)
-
--- | 'ComputeType' constructor.
---
--- The fields accessible through corresponding lenses are:
---
--- * 'ctName' @::@ 'Maybe' 'Compute'
---
-computeType :: ComputeType
-computeType = ComputeType
-    { _ctName = Nothing
-    }
-
--- | The name of the compute type for the bundle.
-ctName :: Lens' ComputeType (Maybe Compute)
-ctName = lens _ctName (\s a -> s { _ctName = a })
-
-instance FromJSON ComputeType where
-    parseJSON = withObject "ComputeType" $ \o -> ComputeType
-        <$> o .:? "Name"
-
-instance ToJSON ComputeType where
-    toJSON ComputeType{..} = object
-        [ "Name" .= _ctName
-        ]
-
-newtype RebootRequest = RebootRequest
-    { _r1WorkspaceId :: Text
-    } deriving (Eq, Ord, Read, Show, Monoid, IsString)
-
--- | 'RebootRequest' constructor.
---
--- The fields accessible through corresponding lenses are:
---
--- * 'r1WorkspaceId' @::@ 'Text'
---
-rebootRequest :: Text -- ^ 'r1WorkspaceId'
-              -> RebootRequest
-rebootRequest p1 = RebootRequest
-    { _r1WorkspaceId = p1
-    }
-
--- | The identifier of the WorkSpace to reboot.
-r1WorkspaceId :: Lens' RebootRequest Text
-r1WorkspaceId = lens _r1WorkspaceId (\s a -> s { _r1WorkspaceId = a })
-
-instance FromJSON RebootRequest where
-    parseJSON = withObject "RebootRequest" $ \o -> RebootRequest
-        <$> o .:  "WorkspaceId"
-
-instance ToJSON RebootRequest where
-    toJSON RebootRequest{..} = object
-        [ "WorkspaceId" .= _r1WorkspaceId
-        ]
-
-newtype UserStorage = UserStorage
-    { _usCapacity :: Maybe Text
-    } deriving (Eq, Ord, Read, Show, Monoid)
-
--- | 'UserStorage' constructor.
---
--- The fields accessible through corresponding lenses are:
---
--- * 'usCapacity' @::@ 'Maybe' 'Text'
---
-userStorage :: UserStorage
-userStorage = UserStorage
-    { _usCapacity = Nothing
-    }
-
--- | The amount of user storage for the bundle.
-usCapacity :: Lens' UserStorage (Maybe Text)
-usCapacity = lens _usCapacity (\s a -> s { _usCapacity = a })
-
-instance FromJSON UserStorage where
-    parseJSON = withObject "UserStorage" $ \o -> UserStorage
-        <$> o .:? "Capacity"
-
-instance ToJSON UserStorage where
-    toJSON UserStorage{..} = object
-        [ "Capacity" .= _usCapacity
-        ]
-
-newtype TerminateRequest = TerminateRequest
-    { _tWorkspaceId :: Text
-    } deriving (Eq, Ord, Read, Show, Monoid, IsString)
-
--- | 'TerminateRequest' constructor.
---
--- The fields accessible through corresponding lenses are:
---
--- * 'tWorkspaceId' @::@ 'Text'
---
-terminateRequest :: Text -- ^ 'tWorkspaceId'
-                 -> TerminateRequest
-terminateRequest p1 = TerminateRequest
-    { _tWorkspaceId = p1
-    }
-
--- | The identifier of the WorkSpace to terminate.
-tWorkspaceId :: Lens' TerminateRequest Text
-tWorkspaceId = lens _tWorkspaceId (\s a -> s { _tWorkspaceId = a })
-
-instance FromJSON TerminateRequest where
-    parseJSON = withObject "TerminateRequest" $ \o -> TerminateRequest
-        <$> o .:  "WorkspaceId"
-
-instance ToJSON TerminateRequest where
-    toJSON TerminateRequest{..} = object
-        [ "WorkspaceId" .= _tWorkspaceId
-        ]
-
-data DefaultWorkspaceCreationProperties = DefaultWorkspaceCreationProperties
-    { _dwcpCustomSecurityGroupId           :: Maybe Text
-    , _dwcpDefaultOu                       :: Maybe Text
-    , _dwcpEnableInternetAccess            :: Maybe Bool
-    , _dwcpEnableWorkDocs                  :: Maybe Bool
-    , _dwcpUserEnabledAsLocalAdministrator :: Maybe Bool
-    } deriving (Eq, Ord, Read, Show)
-
--- | 'DefaultWorkspaceCreationProperties' constructor.
---
--- The fields accessible through corresponding lenses are:
---
--- * 'dwcpCustomSecurityGroupId' @::@ 'Maybe' 'Text'
---
--- * 'dwcpDefaultOu' @::@ 'Maybe' 'Text'
---
--- * 'dwcpEnableInternetAccess' @::@ 'Maybe' 'Bool'
---
--- * 'dwcpEnableWorkDocs' @::@ 'Maybe' 'Bool'
---
--- * 'dwcpUserEnabledAsLocalAdministrator' @::@ 'Maybe' 'Bool'
---
-defaultWorkspaceCreationProperties :: DefaultWorkspaceCreationProperties
-defaultWorkspaceCreationProperties = DefaultWorkspaceCreationProperties
-    { _dwcpEnableWorkDocs                  = Nothing
-    , _dwcpEnableInternetAccess            = Nothing
-    , _dwcpDefaultOu                       = Nothing
-    , _dwcpCustomSecurityGroupId           = Nothing
-    , _dwcpUserEnabledAsLocalAdministrator = Nothing
-    }
-
--- | The identifier of any custom security groups that are applied to the
--- WorkSpaces when they are created.
-dwcpCustomSecurityGroupId :: Lens' DefaultWorkspaceCreationProperties (Maybe Text)
-dwcpCustomSecurityGroupId =
-    lens _dwcpCustomSecurityGroupId
-        (\s a -> s { _dwcpCustomSecurityGroupId = a })
-
--- | The organizational unit (OU) in the directory that the WorkSpace machine
--- accounts are placed in.
-dwcpDefaultOu :: Lens' DefaultWorkspaceCreationProperties (Maybe Text)
-dwcpDefaultOu = lens _dwcpDefaultOu (\s a -> s { _dwcpDefaultOu = a })
-
--- | A public IP address will be attached to all WorkSpaces that are created or
--- rebuilt.
-dwcpEnableInternetAccess :: Lens' DefaultWorkspaceCreationProperties (Maybe Bool)
-dwcpEnableInternetAccess =
-    lens _dwcpEnableInternetAccess
-        (\s a -> s { _dwcpEnableInternetAccess = a })
-
--- | Specifies if the directory is enabled for Amazon WorkDocs.
-dwcpEnableWorkDocs :: Lens' DefaultWorkspaceCreationProperties (Maybe Bool)
-dwcpEnableWorkDocs =
-    lens _dwcpEnableWorkDocs (\s a -> s { _dwcpEnableWorkDocs = a })
-
--- | The WorkSpace user is an administrator on the WorkSpace.
-dwcpUserEnabledAsLocalAdministrator :: Lens' DefaultWorkspaceCreationProperties (Maybe Bool)
-dwcpUserEnabledAsLocalAdministrator =
-    lens _dwcpUserEnabledAsLocalAdministrator
-        (\s a -> s { _dwcpUserEnabledAsLocalAdministrator = a })
-
-instance FromJSON DefaultWorkspaceCreationProperties where
-    parseJSON = withObject "DefaultWorkspaceCreationProperties" $ \o -> DefaultWorkspaceCreationProperties
-        <$> o .:? "CustomSecurityGroupId"
-        <*> o .:? "DefaultOu"
-        <*> o .:? "EnableInternetAccess"
-        <*> o .:? "EnableWorkDocs"
-        <*> o .:? "UserEnabledAsLocalAdministrator"
-
-instance ToJSON DefaultWorkspaceCreationProperties where
-    toJSON DefaultWorkspaceCreationProperties{..} = object
-        [ "EnableWorkDocs"                  .= _dwcpEnableWorkDocs
-        , "EnableInternetAccess"            .= _dwcpEnableInternetAccess
-        , "DefaultOu"                       .= _dwcpDefaultOu
-        , "CustomSecurityGroupId"           .= _dwcpCustomSecurityGroupId
-        , "UserEnabledAsLocalAdministrator" .= _dwcpUserEnabledAsLocalAdministrator
-        ]
-
-data WorkspaceBundle = WorkspaceBundle
-    { _wbBundleId    :: Maybe Text
-    , _wbComputeType :: Maybe ComputeType
-    , _wbDescription :: Maybe Text
-    , _wbName        :: Maybe Text
-    , _wbOwner       :: Maybe Text
-    , _wbUserStorage :: Maybe UserStorage
-    } deriving (Eq, Read, Show)
-
--- | 'WorkspaceBundle' constructor.
---
--- The fields accessible through corresponding lenses are:
---
--- * 'wbBundleId' @::@ 'Maybe' 'Text'
---
--- * 'wbComputeType' @::@ 'Maybe' 'ComputeType'
---
--- * 'wbDescription' @::@ 'Maybe' 'Text'
---
--- * 'wbName' @::@ 'Maybe' 'Text'
---
--- * 'wbOwner' @::@ 'Maybe' 'Text'
---
--- * 'wbUserStorage' @::@ 'Maybe' 'UserStorage'
---
-workspaceBundle :: WorkspaceBundle
-workspaceBundle = WorkspaceBundle
-    { _wbBundleId    = Nothing
-    , _wbName        = Nothing
-    , _wbOwner       = Nothing
-    , _wbDescription = Nothing
-    , _wbUserStorage = Nothing
-    , _wbComputeType = Nothing
-    }
-
--- | The bundle identifier.
-wbBundleId :: Lens' WorkspaceBundle (Maybe Text)
-wbBundleId = lens _wbBundleId (\s a -> s { _wbBundleId = a })
-
--- | A 'ComputeType' object that specifies the compute type for the bundle.
-wbComputeType :: Lens' WorkspaceBundle (Maybe ComputeType)
-wbComputeType = lens _wbComputeType (\s a -> s { _wbComputeType = a })
-
--- | The bundle description.
-wbDescription :: Lens' WorkspaceBundle (Maybe Text)
-wbDescription = lens _wbDescription (\s a -> s { _wbDescription = a })
-
--- | The name of the bundle.
-wbName :: Lens' WorkspaceBundle (Maybe Text)
-wbName = lens _wbName (\s a -> s { _wbName = a })
-
--- | The owner of the bundle. This contains the owner's account identifier, or 'AMAZON' if the bundle is provided by AWS.
-wbOwner :: Lens' WorkspaceBundle (Maybe Text)
-wbOwner = lens _wbOwner (\s a -> s { _wbOwner = a })
-
--- | A 'UserStorage' object that specifies the amount of user storage that the
--- bundle contains.
-wbUserStorage :: Lens' WorkspaceBundle (Maybe UserStorage)
-wbUserStorage = lens _wbUserStorage (\s a -> s { _wbUserStorage = a })
-
-instance FromJSON WorkspaceBundle where
-    parseJSON = withObject "WorkspaceBundle" $ \o -> WorkspaceBundle
-        <$> o .:? "BundleId"
-        <*> o .:? "ComputeType"
-        <*> o .:? "Description"
-        <*> o .:? "Name"
-        <*> o .:? "Owner"
-        <*> o .:? "UserStorage"
-
-instance ToJSON WorkspaceBundle where
-    toJSON WorkspaceBundle{..} = object
-        [ "BundleId"    .= _wbBundleId
-        , "Name"        .= _wbName
-        , "Owner"       .= _wbOwner
-        , "Description" .= _wbDescription
-        , "UserStorage" .= _wbUserStorage
-        , "ComputeType" .= _wbComputeType
-        ]
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE TypeFamilies      #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Network.AWS.WorkSpaces.Types
+-- Copyright   : (c) 2013-2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+module Network.AWS.WorkSpaces.Types
+    (
+    -- * Service
+      WorkSpaces
+
+    -- * Errors
+    , _InvalidParameterValuesException
+    , _ResourceUnavailableException
+    , _ResourceLimitExceededException
+
+    -- * Compute
+    , Compute (..)
+
+    -- * WorkspaceDirectoryState
+    , WorkspaceDirectoryState (..)
+
+    -- * WorkspaceDirectoryType
+    , WorkspaceDirectoryType (..)
+
+    -- * WorkspaceState
+    , WorkspaceState (..)
+
+    -- * ComputeType
+    , ComputeType
+    , computeType
+    , ctName
+
+    -- * DefaultWorkspaceCreationProperties
+    , DefaultWorkspaceCreationProperties
+    , defaultWorkspaceCreationProperties
+    , dwcpCustomSecurityGroupId
+    , dwcpUserEnabledAsLocalAdministrator
+    , dwcpEnableWorkDocs
+    , dwcpEnableInternetAccess
+    , dwcpDefaultOu
+
+    -- * FailedCreateWorkspaceRequest
+    , FailedCreateWorkspaceRequest
+    , failedCreateWorkspaceRequest
+    , fcwrWorkspaceRequest
+    , fcwrErrorCode
+    , fcwrErrorMessage
+
+    -- * FailedWorkspaceChangeRequest
+    , FailedWorkspaceChangeRequest
+    , failedWorkspaceChangeRequest
+    , fwcrErrorCode
+    , fwcrWorkspaceId
+    , fwcrErrorMessage
+
+    -- * RebootRequest
+    , RebootRequest
+    , rebootRequest
+    , rWorkspaceId
+
+    -- * RebuildRequest
+    , RebuildRequest
+    , rebuildRequest
+    , rrWorkspaceId
+
+    -- * TerminateRequest
+    , TerminateRequest
+    , terminateRequest
+    , trWorkspaceId
+
+    -- * UserStorage
+    , UserStorage
+    , userStorage
+    , usCapacity
+
+    -- * Workspace
+    , Workspace
+    , workspace
+    , wDirectoryId
+    , wIPAddress
+    , wState
+    , wUserName
+    , wSubnetId
+    , wBundleId
+    , wErrorCode
+    , wWorkspaceId
+    , wErrorMessage
+
+    -- * WorkspaceBundle
+    , WorkspaceBundle
+    , workspaceBundle
+    , wbOwner
+    , wbBundleId
+    , wbName
+    , wbComputeType
+    , wbUserStorage
+    , wbDescription
+
+    -- * WorkspaceDirectory
+    , WorkspaceDirectory
+    , workspaceDirectory
+    , wdRegistrationCode
+    , wdIAMRoleId
+    , wdDirectoryId
+    , wdState
+    , wdCustomerUserName
+    , wdSubnetIds
+    , wdAlias
+    , wdDirectoryType
+    , wdWorkspaceSecurityGroupId
+    , wdWorkspaceCreationProperties
+    , wdDNSIPAddresses
+    , wdDirectoryName
+
+    -- * WorkspaceRequest
+    , WorkspaceRequest
+    , workspaceRequest
+    , wrDirectoryId
+    , wrUserName
+    , wrBundleId
+    ) where
+
+import           Network.AWS.Prelude
+import           Network.AWS.Sign.V4
+import           Network.AWS.WorkSpaces.Types.Product
+import           Network.AWS.WorkSpaces.Types.Sum
+
+-- | Version @2015-04-08@ of the Amazon WorkSpaces SDK.
+data WorkSpaces
+
+instance AWSService WorkSpaces where
+    type Sg WorkSpaces = V4
+    service = const svc
+      where
+        svc =
+            Service
+            { _svcAbbrev = "WorkSpaces"
+            , _svcPrefix = "workspaces"
+            , _svcVersion = "2015-04-08"
+            , _svcEndpoint = defaultEndpoint svc
+            , _svcTimeout = Just 70
+            , _svcStatus = statusSuccess
+            , _svcError = parseJSONError
+            , _svcRetry = retry
+            }
+        retry =
+            Exponential
+            { _retryBase = 5.0e-2
+            , _retryGrowth = 2
+            , _retryAttempts = 5
+            , _retryCheck = check
+            }
+        check e
+          | has (hasCode "ThrottlingException" . hasStatus 400) e =
+              Just "throttling_exception"
+          | has (hasCode "Throttling" . hasStatus 400) e = Just "throttling"
+          | has (hasStatus 503) e = Just "service_unavailable"
+          | has (hasStatus 500) e = Just "general_server_error"
+          | has (hasStatus 509) e = Just "limit_exceeded"
+          | otherwise = Nothing
+
+-- | One or more parameter values are not valid.
+_InvalidParameterValuesException :: AsError a => Getting (First ServiceError) a ServiceError
+_InvalidParameterValuesException =
+    _ServiceError . hasCode "InvalidParameterValuesException"
+
+-- | The specified resource is not available.
+_ResourceUnavailableException :: AsError a => Getting (First ServiceError) a ServiceError
+_ResourceUnavailableException =
+    _ServiceError . hasCode "ResourceUnavailableException"
+
+-- | Your resource limits have been exceeded.
+_ResourceLimitExceededException :: AsError a => Getting (First ServiceError) a ServiceError
+_ResourceLimitExceededException =
+    _ServiceError . hasCode "ResourceLimitExceededException"
diff --git a/gen/Network/AWS/WorkSpaces/Types/Product.hs b/gen/Network/AWS/WorkSpaces/Types/Product.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/WorkSpaces/Types/Product.hs
@@ -0,0 +1,709 @@
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
+
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Network.AWS.WorkSpaces.Types.Product
+-- Copyright   : (c) 2013-2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+module Network.AWS.WorkSpaces.Types.Product where
+
+import           Network.AWS.Prelude
+import           Network.AWS.WorkSpaces.Types.Sum
+
+-- | Contains information about the compute type of a WorkSpace bundle.
+--
+-- /See:/ 'computeType' smart constructor.
+newtype ComputeType = ComputeType'
+    { _ctName :: Maybe Compute
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ComputeType' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'ctName'
+computeType
+    :: ComputeType
+computeType =
+    ComputeType'
+    { _ctName = Nothing
+    }
+
+-- | The name of the compute type for the bundle.
+ctName :: Lens' ComputeType (Maybe Compute)
+ctName = lens _ctName (\ s a -> s{_ctName = a});
+
+instance FromJSON ComputeType where
+        parseJSON
+          = withObject "ComputeType"
+              (\ x -> ComputeType' <$> (x .:? "Name"))
+
+-- | Contains default WorkSpace creation information.
+--
+-- /See:/ 'defaultWorkspaceCreationProperties' smart constructor.
+data DefaultWorkspaceCreationProperties = DefaultWorkspaceCreationProperties'
+    { _dwcpCustomSecurityGroupId           :: !(Maybe Text)
+    , _dwcpUserEnabledAsLocalAdministrator :: !(Maybe Bool)
+    , _dwcpEnableWorkDocs                  :: !(Maybe Bool)
+    , _dwcpEnableInternetAccess            :: !(Maybe Bool)
+    , _dwcpDefaultOu                       :: !(Maybe Text)
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'DefaultWorkspaceCreationProperties' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'dwcpCustomSecurityGroupId'
+--
+-- * 'dwcpUserEnabledAsLocalAdministrator'
+--
+-- * 'dwcpEnableWorkDocs'
+--
+-- * 'dwcpEnableInternetAccess'
+--
+-- * 'dwcpDefaultOu'
+defaultWorkspaceCreationProperties
+    :: DefaultWorkspaceCreationProperties
+defaultWorkspaceCreationProperties =
+    DefaultWorkspaceCreationProperties'
+    { _dwcpCustomSecurityGroupId = Nothing
+    , _dwcpUserEnabledAsLocalAdministrator = Nothing
+    , _dwcpEnableWorkDocs = Nothing
+    , _dwcpEnableInternetAccess = Nothing
+    , _dwcpDefaultOu = Nothing
+    }
+
+-- | The identifier of any custom security groups that are applied to the
+-- WorkSpaces when they are created.
+dwcpCustomSecurityGroupId :: Lens' DefaultWorkspaceCreationProperties (Maybe Text)
+dwcpCustomSecurityGroupId = lens _dwcpCustomSecurityGroupId (\ s a -> s{_dwcpCustomSecurityGroupId = a});
+
+-- | The WorkSpace user is an administrator on the WorkSpace.
+dwcpUserEnabledAsLocalAdministrator :: Lens' DefaultWorkspaceCreationProperties (Maybe Bool)
+dwcpUserEnabledAsLocalAdministrator = lens _dwcpUserEnabledAsLocalAdministrator (\ s a -> s{_dwcpUserEnabledAsLocalAdministrator = a});
+
+-- | Specifies if the directory is enabled for Amazon WorkDocs.
+dwcpEnableWorkDocs :: Lens' DefaultWorkspaceCreationProperties (Maybe Bool)
+dwcpEnableWorkDocs = lens _dwcpEnableWorkDocs (\ s a -> s{_dwcpEnableWorkDocs = a});
+
+-- | A public IP address will be attached to all WorkSpaces that are created
+-- or rebuilt.
+dwcpEnableInternetAccess :: Lens' DefaultWorkspaceCreationProperties (Maybe Bool)
+dwcpEnableInternetAccess = lens _dwcpEnableInternetAccess (\ s a -> s{_dwcpEnableInternetAccess = a});
+
+-- | The organizational unit (OU) in the directory that the WorkSpace machine
+-- accounts are placed in.
+dwcpDefaultOu :: Lens' DefaultWorkspaceCreationProperties (Maybe Text)
+dwcpDefaultOu = lens _dwcpDefaultOu (\ s a -> s{_dwcpDefaultOu = a});
+
+instance FromJSON DefaultWorkspaceCreationProperties
+         where
+        parseJSON
+          = withObject "DefaultWorkspaceCreationProperties"
+              (\ x ->
+                 DefaultWorkspaceCreationProperties' <$>
+                   (x .:? "CustomSecurityGroupId") <*>
+                     (x .:? "UserEnabledAsLocalAdministrator")
+                     <*> (x .:? "EnableWorkDocs")
+                     <*> (x .:? "EnableInternetAccess")
+                     <*> (x .:? "DefaultOu"))
+
+-- | Contains information about a WorkSpace that could not be created.
+--
+-- /See:/ 'failedCreateWorkspaceRequest' smart constructor.
+data FailedCreateWorkspaceRequest = FailedCreateWorkspaceRequest'
+    { _fcwrWorkspaceRequest :: !(Maybe WorkspaceRequest)
+    , _fcwrErrorCode        :: !(Maybe Text)
+    , _fcwrErrorMessage     :: !(Maybe Text)
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'FailedCreateWorkspaceRequest' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'fcwrWorkspaceRequest'
+--
+-- * 'fcwrErrorCode'
+--
+-- * 'fcwrErrorMessage'
+failedCreateWorkspaceRequest
+    :: FailedCreateWorkspaceRequest
+failedCreateWorkspaceRequest =
+    FailedCreateWorkspaceRequest'
+    { _fcwrWorkspaceRequest = Nothing
+    , _fcwrErrorCode = Nothing
+    , _fcwrErrorMessage = Nothing
+    }
+
+-- | A WorkspaceRequest object that contains the information about the
+-- WorkSpace that could not be created.
+fcwrWorkspaceRequest :: Lens' FailedCreateWorkspaceRequest (Maybe WorkspaceRequest)
+fcwrWorkspaceRequest = lens _fcwrWorkspaceRequest (\ s a -> s{_fcwrWorkspaceRequest = a});
+
+-- | The error code.
+fcwrErrorCode :: Lens' FailedCreateWorkspaceRequest (Maybe Text)
+fcwrErrorCode = lens _fcwrErrorCode (\ s a -> s{_fcwrErrorCode = a});
+
+-- | The textual error message.
+fcwrErrorMessage :: Lens' FailedCreateWorkspaceRequest (Maybe Text)
+fcwrErrorMessage = lens _fcwrErrorMessage (\ s a -> s{_fcwrErrorMessage = a});
+
+instance FromJSON FailedCreateWorkspaceRequest where
+        parseJSON
+          = withObject "FailedCreateWorkspaceRequest"
+              (\ x ->
+                 FailedCreateWorkspaceRequest' <$>
+                   (x .:? "WorkspaceRequest") <*> (x .:? "ErrorCode")
+                     <*> (x .:? "ErrorMessage"))
+
+-- | Contains information about a WorkSpace that could not be rebooted
+-- (RebootWorkspaces), rebuilt (RebuildWorkspaces), or terminated
+-- (TerminateWorkspaces).
+--
+-- /See:/ 'failedWorkspaceChangeRequest' smart constructor.
+data FailedWorkspaceChangeRequest = FailedWorkspaceChangeRequest'
+    { _fwcrErrorCode    :: !(Maybe Text)
+    , _fwcrWorkspaceId  :: !(Maybe Text)
+    , _fwcrErrorMessage :: !(Maybe Text)
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'FailedWorkspaceChangeRequest' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'fwcrErrorCode'
+--
+-- * 'fwcrWorkspaceId'
+--
+-- * 'fwcrErrorMessage'
+failedWorkspaceChangeRequest
+    :: FailedWorkspaceChangeRequest
+failedWorkspaceChangeRequest =
+    FailedWorkspaceChangeRequest'
+    { _fwcrErrorCode = Nothing
+    , _fwcrWorkspaceId = Nothing
+    , _fwcrErrorMessage = Nothing
+    }
+
+-- | The error code.
+fwcrErrorCode :: Lens' FailedWorkspaceChangeRequest (Maybe Text)
+fwcrErrorCode = lens _fwcrErrorCode (\ s a -> s{_fwcrErrorCode = a});
+
+-- | The identifier of the WorkSpace.
+fwcrWorkspaceId :: Lens' FailedWorkspaceChangeRequest (Maybe Text)
+fwcrWorkspaceId = lens _fwcrWorkspaceId (\ s a -> s{_fwcrWorkspaceId = a});
+
+-- | The textual error message.
+fwcrErrorMessage :: Lens' FailedWorkspaceChangeRequest (Maybe Text)
+fwcrErrorMessage = lens _fwcrErrorMessage (\ s a -> s{_fwcrErrorMessage = a});
+
+instance FromJSON FailedWorkspaceChangeRequest where
+        parseJSON
+          = withObject "FailedWorkspaceChangeRequest"
+              (\ x ->
+                 FailedWorkspaceChangeRequest' <$>
+                   (x .:? "ErrorCode") <*> (x .:? "WorkspaceId") <*>
+                     (x .:? "ErrorMessage"))
+
+-- | Contains information used with the RebootWorkspaces operation to reboot
+-- a WorkSpace.
+--
+-- /See:/ 'rebootRequest' smart constructor.
+newtype RebootRequest = RebootRequest'
+    { _rWorkspaceId :: Text
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'RebootRequest' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'rWorkspaceId'
+rebootRequest
+    :: Text -- ^ 'rWorkspaceId'
+    -> RebootRequest
+rebootRequest pWorkspaceId_ =
+    RebootRequest'
+    { _rWorkspaceId = pWorkspaceId_
+    }
+
+-- | The identifier of the WorkSpace to reboot.
+rWorkspaceId :: Lens' RebootRequest Text
+rWorkspaceId = lens _rWorkspaceId (\ s a -> s{_rWorkspaceId = a});
+
+instance ToJSON RebootRequest where
+        toJSON RebootRequest'{..}
+          = object ["WorkspaceId" .= _rWorkspaceId]
+
+-- | Contains information used with the RebuildWorkspaces operation to
+-- rebuild a WorkSpace.
+--
+-- /See:/ 'rebuildRequest' smart constructor.
+newtype RebuildRequest = RebuildRequest'
+    { _rrWorkspaceId :: Text
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'RebuildRequest' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'rrWorkspaceId'
+rebuildRequest
+    :: Text -- ^ 'rrWorkspaceId'
+    -> RebuildRequest
+rebuildRequest pWorkspaceId_ =
+    RebuildRequest'
+    { _rrWorkspaceId = pWorkspaceId_
+    }
+
+-- | The identifier of the WorkSpace to rebuild.
+rrWorkspaceId :: Lens' RebuildRequest Text
+rrWorkspaceId = lens _rrWorkspaceId (\ s a -> s{_rrWorkspaceId = a});
+
+instance ToJSON RebuildRequest where
+        toJSON RebuildRequest'{..}
+          = object ["WorkspaceId" .= _rrWorkspaceId]
+
+-- | Contains information used with the TerminateWorkspaces operation to
+-- terminate a WorkSpace.
+--
+-- /See:/ 'terminateRequest' smart constructor.
+newtype TerminateRequest = TerminateRequest'
+    { _trWorkspaceId :: Text
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'TerminateRequest' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'trWorkspaceId'
+terminateRequest
+    :: Text -- ^ 'trWorkspaceId'
+    -> TerminateRequest
+terminateRequest pWorkspaceId_ =
+    TerminateRequest'
+    { _trWorkspaceId = pWorkspaceId_
+    }
+
+-- | The identifier of the WorkSpace to terminate.
+trWorkspaceId :: Lens' TerminateRequest Text
+trWorkspaceId = lens _trWorkspaceId (\ s a -> s{_trWorkspaceId = a});
+
+instance ToJSON TerminateRequest where
+        toJSON TerminateRequest'{..}
+          = object ["WorkspaceId" .= _trWorkspaceId]
+
+-- | Contains information about the user storage for a WorkSpace bundle.
+--
+-- /See:/ 'userStorage' smart constructor.
+newtype UserStorage = UserStorage'
+    { _usCapacity :: Maybe Text
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'UserStorage' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'usCapacity'
+userStorage
+    :: UserStorage
+userStorage =
+    UserStorage'
+    { _usCapacity = Nothing
+    }
+
+-- | The amount of user storage for the bundle.
+usCapacity :: Lens' UserStorage (Maybe Text)
+usCapacity = lens _usCapacity (\ s a -> s{_usCapacity = a});
+
+instance FromJSON UserStorage where
+        parseJSON
+          = withObject "UserStorage"
+              (\ x -> UserStorage' <$> (x .:? "Capacity"))
+
+-- | Contains information about a WorkSpace.
+--
+-- /See:/ 'workspace' smart constructor.
+data Workspace = Workspace'
+    { _wDirectoryId  :: !(Maybe Text)
+    , _wIPAddress    :: !(Maybe Text)
+    , _wState        :: !(Maybe WorkspaceState)
+    , _wUserName     :: !(Maybe Text)
+    , _wSubnetId     :: !(Maybe Text)
+    , _wBundleId     :: !(Maybe Text)
+    , _wErrorCode    :: !(Maybe Text)
+    , _wWorkspaceId  :: !(Maybe Text)
+    , _wErrorMessage :: !(Maybe Text)
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'Workspace' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'wDirectoryId'
+--
+-- * 'wIPAddress'
+--
+-- * 'wState'
+--
+-- * 'wUserName'
+--
+-- * 'wSubnetId'
+--
+-- * 'wBundleId'
+--
+-- * 'wErrorCode'
+--
+-- * 'wWorkspaceId'
+--
+-- * 'wErrorMessage'
+workspace
+    :: Workspace
+workspace =
+    Workspace'
+    { _wDirectoryId = Nothing
+    , _wIPAddress = Nothing
+    , _wState = Nothing
+    , _wUserName = Nothing
+    , _wSubnetId = Nothing
+    , _wBundleId = Nothing
+    , _wErrorCode = Nothing
+    , _wWorkspaceId = Nothing
+    , _wErrorMessage = Nothing
+    }
+
+-- | The identifier of the AWS Directory Service directory that the WorkSpace
+-- belongs to.
+wDirectoryId :: Lens' Workspace (Maybe Text)
+wDirectoryId = lens _wDirectoryId (\ s a -> s{_wDirectoryId = a});
+
+-- | The IP address of the WorkSpace.
+wIPAddress :: Lens' Workspace (Maybe Text)
+wIPAddress = lens _wIPAddress (\ s a -> s{_wIPAddress = a});
+
+-- | The operational state of the WorkSpace.
+wState :: Lens' Workspace (Maybe WorkspaceState)
+wState = lens _wState (\ s a -> s{_wState = a});
+
+-- | The user that the WorkSpace is assigned to.
+wUserName :: Lens' Workspace (Maybe Text)
+wUserName = lens _wUserName (\ s a -> s{_wUserName = a});
+
+-- | The identifier of the subnet that the WorkSpace is in.
+wSubnetId :: Lens' Workspace (Maybe Text)
+wSubnetId = lens _wSubnetId (\ s a -> s{_wSubnetId = a});
+
+-- | The identifier of the bundle that the WorkSpace was created from.
+wBundleId :: Lens' Workspace (Maybe Text)
+wBundleId = lens _wBundleId (\ s a -> s{_wBundleId = a});
+
+-- | If the WorkSpace could not be created, this contains the error code.
+wErrorCode :: Lens' Workspace (Maybe Text)
+wErrorCode = lens _wErrorCode (\ s a -> s{_wErrorCode = a});
+
+-- | The identifier of the WorkSpace.
+wWorkspaceId :: Lens' Workspace (Maybe Text)
+wWorkspaceId = lens _wWorkspaceId (\ s a -> s{_wWorkspaceId = a});
+
+-- | If the WorkSpace could not be created, this contains a textual error
+-- message that describes the failure.
+wErrorMessage :: Lens' Workspace (Maybe Text)
+wErrorMessage = lens _wErrorMessage (\ s a -> s{_wErrorMessage = a});
+
+instance FromJSON Workspace where
+        parseJSON
+          = withObject "Workspace"
+              (\ x ->
+                 Workspace' <$>
+                   (x .:? "DirectoryId") <*> (x .:? "IpAddress") <*>
+                     (x .:? "State")
+                     <*> (x .:? "UserName")
+                     <*> (x .:? "SubnetId")
+                     <*> (x .:? "BundleId")
+                     <*> (x .:? "ErrorCode")
+                     <*> (x .:? "WorkspaceId")
+                     <*> (x .:? "ErrorMessage"))
+
+-- | Contains information about a WorkSpace bundle.
+--
+-- /See:/ 'workspaceBundle' smart constructor.
+data WorkspaceBundle = WorkspaceBundle'
+    { _wbOwner       :: !(Maybe Text)
+    , _wbBundleId    :: !(Maybe Text)
+    , _wbName        :: !(Maybe Text)
+    , _wbComputeType :: !(Maybe ComputeType)
+    , _wbUserStorage :: !(Maybe UserStorage)
+    , _wbDescription :: !(Maybe Text)
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'WorkspaceBundle' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'wbOwner'
+--
+-- * 'wbBundleId'
+--
+-- * 'wbName'
+--
+-- * 'wbComputeType'
+--
+-- * 'wbUserStorage'
+--
+-- * 'wbDescription'
+workspaceBundle
+    :: WorkspaceBundle
+workspaceBundle =
+    WorkspaceBundle'
+    { _wbOwner = Nothing
+    , _wbBundleId = Nothing
+    , _wbName = Nothing
+    , _wbComputeType = Nothing
+    , _wbUserStorage = Nothing
+    , _wbDescription = Nothing
+    }
+
+-- | The owner of the bundle. This contains the owner\'s account identifier,
+-- or 'AMAZON' if the bundle is provided by AWS.
+wbOwner :: Lens' WorkspaceBundle (Maybe Text)
+wbOwner = lens _wbOwner (\ s a -> s{_wbOwner = a});
+
+-- | The bundle identifier.
+wbBundleId :: Lens' WorkspaceBundle (Maybe Text)
+wbBundleId = lens _wbBundleId (\ s a -> s{_wbBundleId = a});
+
+-- | The name of the bundle.
+wbName :: Lens' WorkspaceBundle (Maybe Text)
+wbName = lens _wbName (\ s a -> s{_wbName = a});
+
+-- | A ComputeType object that specifies the compute type for the bundle.
+wbComputeType :: Lens' WorkspaceBundle (Maybe ComputeType)
+wbComputeType = lens _wbComputeType (\ s a -> s{_wbComputeType = a});
+
+-- | A UserStorage object that specifies the amount of user storage that the
+-- bundle contains.
+wbUserStorage :: Lens' WorkspaceBundle (Maybe UserStorage)
+wbUserStorage = lens _wbUserStorage (\ s a -> s{_wbUserStorage = a});
+
+-- | The bundle description.
+wbDescription :: Lens' WorkspaceBundle (Maybe Text)
+wbDescription = lens _wbDescription (\ s a -> s{_wbDescription = a});
+
+instance FromJSON WorkspaceBundle where
+        parseJSON
+          = withObject "WorkspaceBundle"
+              (\ x ->
+                 WorkspaceBundle' <$>
+                   (x .:? "Owner") <*> (x .:? "BundleId") <*>
+                     (x .:? "Name")
+                     <*> (x .:? "ComputeType")
+                     <*> (x .:? "UserStorage")
+                     <*> (x .:? "Description"))
+
+-- | Contains information about an AWS Directory Service directory for use
+-- with Amazon WorkSpaces.
+--
+-- /See:/ 'workspaceDirectory' smart constructor.
+data WorkspaceDirectory = WorkspaceDirectory'
+    { _wdRegistrationCode            :: !(Maybe Text)
+    , _wdIAMRoleId                   :: !(Maybe Text)
+    , _wdDirectoryId                 :: !(Maybe Text)
+    , _wdState                       :: !(Maybe WorkspaceDirectoryState)
+    , _wdCustomerUserName            :: !(Maybe Text)
+    , _wdSubnetIds                   :: !(Maybe [Text])
+    , _wdAlias                       :: !(Maybe Text)
+    , _wdDirectoryType               :: !(Maybe WorkspaceDirectoryType)
+    , _wdWorkspaceSecurityGroupId    :: !(Maybe Text)
+    , _wdWorkspaceCreationProperties :: !(Maybe DefaultWorkspaceCreationProperties)
+    , _wdDNSIPAddresses              :: !(Maybe [Text])
+    , _wdDirectoryName               :: !(Maybe Text)
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'WorkspaceDirectory' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'wdRegistrationCode'
+--
+-- * 'wdIAMRoleId'
+--
+-- * 'wdDirectoryId'
+--
+-- * 'wdState'
+--
+-- * 'wdCustomerUserName'
+--
+-- * 'wdSubnetIds'
+--
+-- * 'wdAlias'
+--
+-- * 'wdDirectoryType'
+--
+-- * 'wdWorkspaceSecurityGroupId'
+--
+-- * 'wdWorkspaceCreationProperties'
+--
+-- * 'wdDNSIPAddresses'
+--
+-- * 'wdDirectoryName'
+workspaceDirectory
+    :: WorkspaceDirectory
+workspaceDirectory =
+    WorkspaceDirectory'
+    { _wdRegistrationCode = Nothing
+    , _wdIAMRoleId = Nothing
+    , _wdDirectoryId = Nothing
+    , _wdState = Nothing
+    , _wdCustomerUserName = Nothing
+    , _wdSubnetIds = Nothing
+    , _wdAlias = Nothing
+    , _wdDirectoryType = Nothing
+    , _wdWorkspaceSecurityGroupId = Nothing
+    , _wdWorkspaceCreationProperties = Nothing
+    , _wdDNSIPAddresses = Nothing
+    , _wdDirectoryName = Nothing
+    }
+
+-- | The registration code for the directory. This is the code that users
+-- enter in their Amazon WorkSpaces client application to connect to the
+-- directory.
+wdRegistrationCode :: Lens' WorkspaceDirectory (Maybe Text)
+wdRegistrationCode = lens _wdRegistrationCode (\ s a -> s{_wdRegistrationCode = a});
+
+-- | The identifier of the IAM role. This is the role that allows Amazon
+-- WorkSpaces to make calls to other services, such as Amazon EC2, on your
+-- behalf.
+wdIAMRoleId :: Lens' WorkspaceDirectory (Maybe Text)
+wdIAMRoleId = lens _wdIAMRoleId (\ s a -> s{_wdIAMRoleId = a});
+
+-- | The directory identifier.
+wdDirectoryId :: Lens' WorkspaceDirectory (Maybe Text)
+wdDirectoryId = lens _wdDirectoryId (\ s a -> s{_wdDirectoryId = a});
+
+-- | The state of the directory\'s registration with Amazon WorkSpaces
+wdState :: Lens' WorkspaceDirectory (Maybe WorkspaceDirectoryState)
+wdState = lens _wdState (\ s a -> s{_wdState = a});
+
+-- | The user name for the service account.
+wdCustomerUserName :: Lens' WorkspaceDirectory (Maybe Text)
+wdCustomerUserName = lens _wdCustomerUserName (\ s a -> s{_wdCustomerUserName = a});
+
+-- | An array of strings that contains the identifiers of the subnets used
+-- with the directory.
+wdSubnetIds :: Lens' WorkspaceDirectory [Text]
+wdSubnetIds = lens _wdSubnetIds (\ s a -> s{_wdSubnetIds = a}) . _Default . _Coerce;
+
+-- | The directory alias.
+wdAlias :: Lens' WorkspaceDirectory (Maybe Text)
+wdAlias = lens _wdAlias (\ s a -> s{_wdAlias = a});
+
+-- | The directory type.
+wdDirectoryType :: Lens' WorkspaceDirectory (Maybe WorkspaceDirectoryType)
+wdDirectoryType = lens _wdDirectoryType (\ s a -> s{_wdDirectoryType = a});
+
+-- | The identifier of the security group that is assigned to new WorkSpaces.
+wdWorkspaceSecurityGroupId :: Lens' WorkspaceDirectory (Maybe Text)
+wdWorkspaceSecurityGroupId = lens _wdWorkspaceSecurityGroupId (\ s a -> s{_wdWorkspaceSecurityGroupId = a});
+
+-- | A structure that specifies the default creation properties for all
+-- WorkSpaces in the directory.
+wdWorkspaceCreationProperties :: Lens' WorkspaceDirectory (Maybe DefaultWorkspaceCreationProperties)
+wdWorkspaceCreationProperties = lens _wdWorkspaceCreationProperties (\ s a -> s{_wdWorkspaceCreationProperties = a});
+
+-- | An array of strings that contains the IP addresses of the DNS servers
+-- for the directory.
+wdDNSIPAddresses :: Lens' WorkspaceDirectory [Text]
+wdDNSIPAddresses = lens _wdDNSIPAddresses (\ s a -> s{_wdDNSIPAddresses = a}) . _Default . _Coerce;
+
+-- | The name of the directory.
+wdDirectoryName :: Lens' WorkspaceDirectory (Maybe Text)
+wdDirectoryName = lens _wdDirectoryName (\ s a -> s{_wdDirectoryName = a});
+
+instance FromJSON WorkspaceDirectory where
+        parseJSON
+          = withObject "WorkspaceDirectory"
+              (\ x ->
+                 WorkspaceDirectory' <$>
+                   (x .:? "RegistrationCode") <*> (x .:? "IamRoleId")
+                     <*> (x .:? "DirectoryId")
+                     <*> (x .:? "State")
+                     <*> (x .:? "CustomerUserName")
+                     <*> (x .:? "SubnetIds" .!= mempty)
+                     <*> (x .:? "Alias")
+                     <*> (x .:? "DirectoryType")
+                     <*> (x .:? "WorkspaceSecurityGroupId")
+                     <*> (x .:? "WorkspaceCreationProperties")
+                     <*> (x .:? "DnsIpAddresses" .!= mempty)
+                     <*> (x .:? "DirectoryName"))
+
+-- | Contains information about a WorkSpace creation request.
+--
+-- /See:/ 'workspaceRequest' smart constructor.
+data WorkspaceRequest = WorkspaceRequest'
+    { _wrDirectoryId :: !Text
+    , _wrUserName    :: !Text
+    , _wrBundleId    :: !Text
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'WorkspaceRequest' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'wrDirectoryId'
+--
+-- * 'wrUserName'
+--
+-- * 'wrBundleId'
+workspaceRequest
+    :: Text -- ^ 'wrDirectoryId'
+    -> Text -- ^ 'wrUserName'
+    -> Text -- ^ 'wrBundleId'
+    -> WorkspaceRequest
+workspaceRequest pDirectoryId_ pUserName_ pBundleId_ =
+    WorkspaceRequest'
+    { _wrDirectoryId = pDirectoryId_
+    , _wrUserName = pUserName_
+    , _wrBundleId = pBundleId_
+    }
+
+-- | The identifier of the AWS Directory Service directory to create the
+-- WorkSpace in. You can use the DescribeWorkspaceDirectories operation to
+-- obtain a list of the directories that are available.
+wrDirectoryId :: Lens' WorkspaceRequest Text
+wrDirectoryId = lens _wrDirectoryId (\ s a -> s{_wrDirectoryId = a});
+
+-- | The username that the WorkSpace is assigned to. This username must exist
+-- in the AWS Directory Service directory specified by the 'DirectoryId'
+-- member.
+wrUserName :: Lens' WorkspaceRequest Text
+wrUserName = lens _wrUserName (\ s a -> s{_wrUserName = a});
+
+-- | The identifier of the bundle to create the WorkSpace from. You can use
+-- the DescribeWorkspaceBundles operation to obtain a list of the bundles
+-- that are available.
+wrBundleId :: Lens' WorkspaceRequest Text
+wrBundleId = lens _wrBundleId (\ s a -> s{_wrBundleId = a});
+
+instance FromJSON WorkspaceRequest where
+        parseJSON
+          = withObject "WorkspaceRequest"
+              (\ x ->
+                 WorkspaceRequest' <$>
+                   (x .: "DirectoryId") <*> (x .: "UserName") <*>
+                     (x .: "BundleId"))
+
+instance ToJSON WorkspaceRequest where
+        toJSON WorkspaceRequest'{..}
+          = object
+              ["DirectoryId" .= _wrDirectoryId,
+               "UserName" .= _wrUserName, "BundleId" .= _wrBundleId]
diff --git a/gen/Network/AWS/WorkSpaces/Types/Sum.hs b/gen/Network/AWS/WorkSpaces/Types/Sum.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/WorkSpaces/Types/Sum.hs
@@ -0,0 +1,156 @@
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE LambdaCase         #-}
+{-# LANGUAGE OverloadedStrings  #-}
+
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Network.AWS.WorkSpaces.Types.Sum
+-- Copyright   : (c) 2013-2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+module Network.AWS.WorkSpaces.Types.Sum where
+
+import           Network.AWS.Prelude
+
+data Compute
+    = Performance
+    | Standard
+    | Value
+    deriving (Eq,Ord,Read,Show,Enum,Data,Typeable,Generic)
+
+instance FromText Compute where
+    parser = takeLowerText >>= \case
+        "performance" -> pure Performance
+        "standard" -> pure Standard
+        "value" -> pure Value
+        e -> fromTextError $ "Failure parsing Compute from value: '" <> e
+           <> "'. Accepted values: performance, standard, value"
+
+instance ToText Compute where
+    toText = \case
+        Performance -> "performance"
+        Standard -> "standard"
+        Value -> "value"
+
+instance Hashable     Compute
+instance ToByteString Compute
+instance ToQuery      Compute
+instance ToHeader     Compute
+
+instance FromJSON Compute where
+    parseJSON = parseJSONText "Compute"
+
+data WorkspaceDirectoryState
+    = Deregistered
+    | Deregistering
+    | Error'
+    | Registered
+    | Registering
+    deriving (Eq,Ord,Read,Show,Enum,Data,Typeable,Generic)
+
+instance FromText WorkspaceDirectoryState where
+    parser = takeLowerText >>= \case
+        "deregistered" -> pure Deregistered
+        "deregistering" -> pure Deregistering
+        "error" -> pure Error'
+        "registered" -> pure Registered
+        "registering" -> pure Registering
+        e -> fromTextError $ "Failure parsing WorkspaceDirectoryState from value: '" <> e
+           <> "'. Accepted values: deregistered, deregistering, error, registered, registering"
+
+instance ToText WorkspaceDirectoryState where
+    toText = \case
+        Deregistered -> "deregistered"
+        Deregistering -> "deregistering"
+        Error' -> "error"
+        Registered -> "registered"
+        Registering -> "registering"
+
+instance Hashable     WorkspaceDirectoryState
+instance ToByteString WorkspaceDirectoryState
+instance ToQuery      WorkspaceDirectoryState
+instance ToHeader     WorkspaceDirectoryState
+
+instance FromJSON WorkspaceDirectoryState where
+    parseJSON = parseJSONText "WorkspaceDirectoryState"
+
+data WorkspaceDirectoryType
+    = AdConnector
+    | SimpleAd
+    deriving (Eq,Ord,Read,Show,Enum,Data,Typeable,Generic)
+
+instance FromText WorkspaceDirectoryType where
+    parser = takeLowerText >>= \case
+        "ad_connector" -> pure AdConnector
+        "simple_ad" -> pure SimpleAd
+        e -> fromTextError $ "Failure parsing WorkspaceDirectoryType from value: '" <> e
+           <> "'. Accepted values: ad_connector, simple_ad"
+
+instance ToText WorkspaceDirectoryType where
+    toText = \case
+        AdConnector -> "ad_connector"
+        SimpleAd -> "simple_ad"
+
+instance Hashable     WorkspaceDirectoryType
+instance ToByteString WorkspaceDirectoryType
+instance ToQuery      WorkspaceDirectoryType
+instance ToHeader     WorkspaceDirectoryType
+
+instance FromJSON WorkspaceDirectoryType where
+    parseJSON = parseJSONText "WorkspaceDirectoryType"
+
+data WorkspaceState
+    = WSAvailable
+    | WSError'
+    | WSImpaired
+    | WSPending
+    | WSRebooting
+    | WSRebuilding
+    | WSSuspended
+    | WSTerminated
+    | WSTerminating
+    | WSUnhealthy
+    deriving (Eq,Ord,Read,Show,Enum,Data,Typeable,Generic)
+
+instance FromText WorkspaceState where
+    parser = takeLowerText >>= \case
+        "available" -> pure WSAvailable
+        "error" -> pure WSError'
+        "impaired" -> pure WSImpaired
+        "pending" -> pure WSPending
+        "rebooting" -> pure WSRebooting
+        "rebuilding" -> pure WSRebuilding
+        "suspended" -> pure WSSuspended
+        "terminated" -> pure WSTerminated
+        "terminating" -> pure WSTerminating
+        "unhealthy" -> pure WSUnhealthy
+        e -> fromTextError $ "Failure parsing WorkspaceState from value: '" <> e
+           <> "'. Accepted values: available, error, impaired, pending, rebooting, rebuilding, suspended, terminated, terminating, unhealthy"
+
+instance ToText WorkspaceState where
+    toText = \case
+        WSAvailable -> "available"
+        WSError' -> "error"
+        WSImpaired -> "impaired"
+        WSPending -> "pending"
+        WSRebooting -> "rebooting"
+        WSRebuilding -> "rebuilding"
+        WSSuspended -> "suspended"
+        WSTerminated -> "terminated"
+        WSTerminating -> "terminating"
+        WSUnhealthy -> "unhealthy"
+
+instance Hashable     WorkspaceState
+instance ToByteString WorkspaceState
+instance ToQuery      WorkspaceState
+instance ToHeader     WorkspaceState
+
+instance FromJSON WorkspaceState where
+    parseJSON = parseJSONText "WorkspaceState"
diff --git a/gen/Network/AWS/WorkSpaces/Waiters.hs b/gen/Network/AWS/WorkSpaces/Waiters.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/WorkSpaces/Waiters.hs
@@ -0,0 +1,20 @@
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE TypeFamilies      #-}
+
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Network.AWS.WorkSpaces.Waiters
+-- Copyright   : (c) 2013-2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+module Network.AWS.WorkSpaces.Waiters where
+
+import           Network.AWS.Prelude
+import           Network.AWS.Waiter
+import           Network.AWS.WorkSpaces.Types
diff --git a/test/Main.hs b/test/Main.hs
new file mode 100644
--- /dev/null
+++ b/test/Main.hs
@@ -0,0 +1,21 @@
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- |
+-- Module      : Main
+-- Copyright   : (c) 2013-2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+module Main (main) where
+
+import Test.Tasty
+import Test.AWS.WorkSpaces
+import Test.AWS.WorkSpaces.Internal
+
+main :: IO ()
+main = defaultMain $ testGroup "WorkSpaces"
+    [ testGroup "tests"    tests
+    , testGroup "fixtures" fixtures
+    ]
diff --git a/test/Test/AWS/Gen/WorkSpaces.hs b/test/Test/AWS/Gen/WorkSpaces.hs
new file mode 100644
--- /dev/null
+++ b/test/Test/AWS/Gen/WorkSpaces.hs
@@ -0,0 +1,158 @@
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-orphans        #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Test.AWS.Gen.WorkSpaces
+-- Copyright   : (c) 2013-2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+module Test.AWS.Gen.WorkSpaces where
+
+import Data.Proxy
+import Test.AWS.Fixture
+import Test.AWS.Prelude
+import Test.Tasty
+import Network.AWS.WorkSpaces
+import Test.AWS.WorkSpaces.Internal
+
+-- Auto-generated: the actual test selection needs to be manually placed into
+-- the top-level so that real test data can be incrementally added.
+--
+-- This commented snippet is what the entire set should look like:
+
+-- fixtures :: TestTree
+-- fixtures =
+--     [ testGroup "request"
+--         [ testDescribeWorkspaceDirectories $
+--             describeWorkspaceDirectories
+--
+--         , testDescribeWorkspaceBundles $
+--             describeWorkspaceBundles
+--
+--         , testRebuildWorkspaces $
+--             rebuildWorkspaces
+--
+--         , testRebootWorkspaces $
+--             rebootWorkspaces
+--
+--         , testTerminateWorkspaces $
+--             terminateWorkspaces
+--
+--         , testCreateWorkspaces $
+--             createWorkspaces
+--
+--         , testDescribeWorkspaces $
+--             describeWorkspaces
+--
+--           ]
+
+--     , testGroup "response"
+--         [ testDescribeWorkspaceDirectoriesResponse $
+--             describeWorkspaceDirectoriesResponse
+--
+--         , testDescribeWorkspaceBundlesResponse $
+--             describeWorkspaceBundlesResponse
+--
+--         , testRebuildWorkspacesResponse $
+--             rebuildWorkspacesResponse
+--
+--         , testRebootWorkspacesResponse $
+--             rebootWorkspacesResponse
+--
+--         , testTerminateWorkspacesResponse $
+--             terminateWorkspacesResponse
+--
+--         , testCreateWorkspacesResponse $
+--             createWorkspacesResponse
+--
+--         , testDescribeWorkspacesResponse $
+--             describeWorkspacesResponse
+--
+--           ]
+--     ]
+
+-- Requests
+
+testDescribeWorkspaceDirectories :: DescribeWorkspaceDirectories -> TestTree
+testDescribeWorkspaceDirectories = req
+    "DescribeWorkspaceDirectories"
+    "fixture/DescribeWorkspaceDirectories"
+
+testDescribeWorkspaceBundles :: DescribeWorkspaceBundles -> TestTree
+testDescribeWorkspaceBundles = req
+    "DescribeWorkspaceBundles"
+    "fixture/DescribeWorkspaceBundles"
+
+testRebuildWorkspaces :: RebuildWorkspaces -> TestTree
+testRebuildWorkspaces = req
+    "RebuildWorkspaces"
+    "fixture/RebuildWorkspaces"
+
+testRebootWorkspaces :: RebootWorkspaces -> TestTree
+testRebootWorkspaces = req
+    "RebootWorkspaces"
+    "fixture/RebootWorkspaces"
+
+testTerminateWorkspaces :: TerminateWorkspaces -> TestTree
+testTerminateWorkspaces = req
+    "TerminateWorkspaces"
+    "fixture/TerminateWorkspaces"
+
+testCreateWorkspaces :: CreateWorkspaces -> TestTree
+testCreateWorkspaces = req
+    "CreateWorkspaces"
+    "fixture/CreateWorkspaces"
+
+testDescribeWorkspaces :: DescribeWorkspaces -> TestTree
+testDescribeWorkspaces = req
+    "DescribeWorkspaces"
+    "fixture/DescribeWorkspaces"
+
+-- Responses
+
+testDescribeWorkspaceDirectoriesResponse :: DescribeWorkspaceDirectoriesResponse -> TestTree
+testDescribeWorkspaceDirectoriesResponse = res
+    "DescribeWorkspaceDirectoriesResponse"
+    "fixture/DescribeWorkspaceDirectoriesResponse"
+    (Proxy :: Proxy DescribeWorkspaceDirectories)
+
+testDescribeWorkspaceBundlesResponse :: DescribeWorkspaceBundlesResponse -> TestTree
+testDescribeWorkspaceBundlesResponse = res
+    "DescribeWorkspaceBundlesResponse"
+    "fixture/DescribeWorkspaceBundlesResponse"
+    (Proxy :: Proxy DescribeWorkspaceBundles)
+
+testRebuildWorkspacesResponse :: RebuildWorkspacesResponse -> TestTree
+testRebuildWorkspacesResponse = res
+    "RebuildWorkspacesResponse"
+    "fixture/RebuildWorkspacesResponse"
+    (Proxy :: Proxy RebuildWorkspaces)
+
+testRebootWorkspacesResponse :: RebootWorkspacesResponse -> TestTree
+testRebootWorkspacesResponse = res
+    "RebootWorkspacesResponse"
+    "fixture/RebootWorkspacesResponse"
+    (Proxy :: Proxy RebootWorkspaces)
+
+testTerminateWorkspacesResponse :: TerminateWorkspacesResponse -> TestTree
+testTerminateWorkspacesResponse = res
+    "TerminateWorkspacesResponse"
+    "fixture/TerminateWorkspacesResponse"
+    (Proxy :: Proxy TerminateWorkspaces)
+
+testCreateWorkspacesResponse :: CreateWorkspacesResponse -> TestTree
+testCreateWorkspacesResponse = res
+    "CreateWorkspacesResponse"
+    "fixture/CreateWorkspacesResponse"
+    (Proxy :: Proxy CreateWorkspaces)
+
+testDescribeWorkspacesResponse :: DescribeWorkspacesResponse -> TestTree
+testDescribeWorkspacesResponse = res
+    "DescribeWorkspacesResponse"
+    "fixture/DescribeWorkspacesResponse"
+    (Proxy :: Proxy DescribeWorkspaces)
diff --git a/test/Test/AWS/WorkSpaces.hs b/test/Test/AWS/WorkSpaces.hs
new file mode 100644
--- /dev/null
+++ b/test/Test/AWS/WorkSpaces.hs
@@ -0,0 +1,26 @@
+{-# LANGUAGE OverloadedStrings #-}
+
+-- Module      : Test.AWS.WorkSpaces
+-- Copyright   : (c) 2013-2015 Brendan Hay
+-- License     : This Source Code Form is subject to the terms of
+--               the Mozilla Public License, v. 2.0.
+--               A copy of the MPL can be found in the LICENSE file or
+--               you can obtain it at http://mozilla.org/MPL/2.0/.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : experimental
+-- Portability : non-portable (GHC extensions)
+
+module Test.AWS.WorkSpaces
+    ( tests
+    , fixtures
+    ) where
+
+import           Network.AWS.WorkSpaces
+import           Test.AWS.Gen.WorkSpaces
+import           Test.Tasty
+
+tests :: [TestTree]
+tests = []
+
+fixtures :: [TestTree]
+fixtures = []
diff --git a/test/Test/AWS/WorkSpaces/Internal.hs b/test/Test/AWS/WorkSpaces/Internal.hs
new file mode 100644
--- /dev/null
+++ b/test/Test/AWS/WorkSpaces/Internal.hs
@@ -0,0 +1,16 @@
+{-# LANGUAGE OverloadedStrings #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Module      : Test.AWS.WorkSpaces.Internal
+-- Copyright   : (c) 2013-2015 Brendan Hay
+-- License     : This Source Code Form is subject to the terms of
+--               the Mozilla Public License, v. 2.0.
+--               A copy of the MPL can be found in the LICENSE file or
+--               you can obtain it at http://mozilla.org/MPL/2.0/.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : experimental
+-- Portability : non-portable (GHC extensions)
+
+module Test.AWS.WorkSpaces.Internal where
+
+import Test.AWS.Prelude
