packages feed

gogol-analyticsreporting 0.4.0 → 0.5.0

raw patch · 8 files changed

+4505/−2581 lines, 8 filesdep ~gogol-corePVP ok

version bump matches the API change (PVP)

Dependency ranges changed: gogol-core

API changes (from Hackage documentation)

- Network.Google.AnalyticsReporting: Hit :: SegmentMetricFilterScope
- Network.Google.AnalyticsReporting: Product :: SegmentMetricFilterScope
- Network.Google.AnalyticsReporting: Session :: SegmentMetricFilterScope
- Network.Google.AnalyticsReporting: UnspecifiedScope :: SegmentMetricFilterScope
- Network.Google.AnalyticsReporting: User :: SegmentMetricFilterScope
- Network.Google.AnalyticsReporting.Types: Hit :: SegmentMetricFilterScope
- Network.Google.AnalyticsReporting.Types: Product :: SegmentMetricFilterScope
- Network.Google.AnalyticsReporting.Types: Session :: SegmentMetricFilterScope
- Network.Google.AnalyticsReporting.Types: UnspecifiedScope :: SegmentMetricFilterScope
- Network.Google.AnalyticsReporting.Types: User :: SegmentMetricFilterScope
+ Network.Google.AnalyticsReporting: ActivityTypeUnspecified :: ActivityActivityType
+ Network.Google.AnalyticsReporting: AddToCart :: EcommerceDataActionType
+ Network.Google.AnalyticsReporting: Checkout :: EcommerceDataActionType
+ Network.Google.AnalyticsReporting: CheckoutOption :: EcommerceDataActionType
+ Network.Google.AnalyticsReporting: Classic :: EcommerceDataEcommerceType
+ Network.Google.AnalyticsReporting: Click :: EcommerceDataActionType
+ Network.Google.AnalyticsReporting: DetailsView :: EcommerceDataActionType
+ Network.Google.AnalyticsReporting: Ecommerce :: ActivityActivityType
+ Network.Google.AnalyticsReporting: EcommerceTypeUnspecified :: EcommerceDataEcommerceType
+ Network.Google.AnalyticsReporting: Enhanced :: EcommerceDataEcommerceType
+ Network.Google.AnalyticsReporting: Event :: ActivityActivityType
+ Network.Google.AnalyticsReporting: Goal :: ActivityActivityType
+ Network.Google.AnalyticsReporting: Pageview :: ActivityActivityType
+ Network.Google.AnalyticsReporting: Payment :: EcommerceDataActionType
+ Network.Google.AnalyticsReporting: Refund :: EcommerceDataActionType
+ Network.Google.AnalyticsReporting: RemoveFromCart :: EcommerceDataActionType
+ Network.Google.AnalyticsReporting: SMFSHit :: SegmentMetricFilterScope
+ Network.Google.AnalyticsReporting: SMFSProduct :: SegmentMetricFilterScope
+ Network.Google.AnalyticsReporting: SMFSSession :: SegmentMetricFilterScope
+ Network.Google.AnalyticsReporting: SMFSUnspecifiedScope :: SegmentMetricFilterScope
+ Network.Google.AnalyticsReporting: SMFSUser :: SegmentMetricFilterScope
+ Network.Google.AnalyticsReporting: Screenview :: ActivityActivityType
+ Network.Google.AnalyticsReporting: Unknown :: EcommerceDataActionType
+ Network.Google.AnalyticsReporting: UserIdTypeClientId :: UserType
+ Network.Google.AnalyticsReporting: UserIdTypeUnspecified :: UserType
+ Network.Google.AnalyticsReporting: UserIdTypeUserId :: UserType
+ Network.Google.AnalyticsReporting: aActivityTime :: Lens' Activity (Maybe UTCTime)
+ Network.Google.AnalyticsReporting: aActivityType :: Lens' Activity (Maybe ActivityActivityType)
+ Network.Google.AnalyticsReporting: aAppview :: Lens' Activity (Maybe ScreenviewData)
+ Network.Google.AnalyticsReporting: aCampaign :: Lens' Activity (Maybe Text)
+ Network.Google.AnalyticsReporting: aChannelGrouping :: Lens' Activity (Maybe Text)
+ Network.Google.AnalyticsReporting: aCustomDimension :: Lens' Activity [CustomDimension]
+ Network.Google.AnalyticsReporting: aEcommerce :: Lens' Activity (Maybe EcommerceData)
+ Network.Google.AnalyticsReporting: aEvent :: Lens' Activity (Maybe EventData)
+ Network.Google.AnalyticsReporting: aGoals :: Lens' Activity (Maybe GoalSetData)
+ Network.Google.AnalyticsReporting: aHostname :: Lens' Activity (Maybe Text)
+ Network.Google.AnalyticsReporting: aKeyword :: Lens' Activity (Maybe Text)
+ Network.Google.AnalyticsReporting: aLandingPagePath :: Lens' Activity (Maybe Text)
+ Network.Google.AnalyticsReporting: aMedium :: Lens' Activity (Maybe Text)
+ Network.Google.AnalyticsReporting: aPageview :: Lens' Activity (Maybe PageviewData)
+ Network.Google.AnalyticsReporting: aSource :: Lens' Activity (Maybe Text)
+ Network.Google.AnalyticsReporting: activity :: Activity
+ Network.Google.AnalyticsReporting: cdIndex :: Lens' CustomDimension (Maybe Int32)
+ Network.Google.AnalyticsReporting: cdValue :: Lens' CustomDimension (Maybe Text)
+ Network.Google.AnalyticsReporting: customDimension :: CustomDimension
+ Network.Google.AnalyticsReporting: data Activity
+ Network.Google.AnalyticsReporting: data ActivityActivityType
+ Network.Google.AnalyticsReporting: data CustomDimension
+ Network.Google.AnalyticsReporting: data EcommerceData
+ Network.Google.AnalyticsReporting: data EcommerceDataActionType
+ Network.Google.AnalyticsReporting: data EcommerceDataEcommerceType
+ Network.Google.AnalyticsReporting: data EventData
+ Network.Google.AnalyticsReporting: data GoalData
+ Network.Google.AnalyticsReporting: data GoalSetData
+ Network.Google.AnalyticsReporting: data PageviewData
+ Network.Google.AnalyticsReporting: data ProductData
+ Network.Google.AnalyticsReporting: data ScreenviewData
+ Network.Google.AnalyticsReporting: data SearchUserActivityRequest
+ Network.Google.AnalyticsReporting: data SearchUserActivityResponse
+ Network.Google.AnalyticsReporting: data TransactionData
+ Network.Google.AnalyticsReporting: data User
+ Network.Google.AnalyticsReporting: data UserActivitySession
+ Network.Google.AnalyticsReporting: data UserType
+ Network.Google.AnalyticsReporting: ecommerceData :: EcommerceData
+ Network.Google.AnalyticsReporting: edActionType :: Lens' EcommerceData (Maybe EcommerceDataActionType)
+ Network.Google.AnalyticsReporting: edEcommerceType :: Lens' EcommerceData (Maybe EcommerceDataEcommerceType)
+ Network.Google.AnalyticsReporting: edEventAction :: Lens' EventData (Maybe Text)
+ Network.Google.AnalyticsReporting: edEventCategory :: Lens' EventData (Maybe Text)
+ Network.Google.AnalyticsReporting: edEventCount :: Lens' EventData (Maybe Int64)
+ Network.Google.AnalyticsReporting: edEventLabel :: Lens' EventData (Maybe Text)
+ Network.Google.AnalyticsReporting: edEventValue :: Lens' EventData (Maybe Int64)
+ Network.Google.AnalyticsReporting: edProducts :: Lens' EcommerceData [ProductData]
+ Network.Google.AnalyticsReporting: edTransaction :: Lens' EcommerceData (Maybe TransactionData)
+ Network.Google.AnalyticsReporting: eventData :: EventData
+ Network.Google.AnalyticsReporting: gdGoalCompletionLocation :: Lens' GoalData (Maybe Text)
+ Network.Google.AnalyticsReporting: gdGoalCompletions :: Lens' GoalData (Maybe Int64)
+ Network.Google.AnalyticsReporting: gdGoalIndex :: Lens' GoalData (Maybe Int32)
+ Network.Google.AnalyticsReporting: gdGoalName :: Lens' GoalData (Maybe Text)
+ Network.Google.AnalyticsReporting: gdGoalPreviousStep1 :: Lens' GoalData (Maybe Text)
+ Network.Google.AnalyticsReporting: gdGoalPreviousStep2 :: Lens' GoalData (Maybe Text)
+ Network.Google.AnalyticsReporting: gdGoalPreviousStep3 :: Lens' GoalData (Maybe Text)
+ Network.Google.AnalyticsReporting: gdGoalValue :: Lens' GoalData (Maybe Double)
+ Network.Google.AnalyticsReporting: goalData :: GoalData
+ Network.Google.AnalyticsReporting: goalSetData :: GoalSetData
+ Network.Google.AnalyticsReporting: gsdGoals :: Lens' GoalSetData [GoalData]
+ Network.Google.AnalyticsReporting: pageviewData :: PageviewData
+ Network.Google.AnalyticsReporting: pdItemRevenue :: Lens' ProductData (Maybe Double)
+ Network.Google.AnalyticsReporting: pdPagePath :: Lens' PageviewData (Maybe Text)
+ Network.Google.AnalyticsReporting: pdPageTitle :: Lens' PageviewData (Maybe Text)
+ Network.Google.AnalyticsReporting: pdProductName :: Lens' ProductData (Maybe Text)
+ Network.Google.AnalyticsReporting: pdProductQuantity :: Lens' ProductData (Maybe Int64)
+ Network.Google.AnalyticsReporting: pdProductSKU :: Lens' ProductData (Maybe Text)
+ Network.Google.AnalyticsReporting: productData :: ProductData
+ Network.Google.AnalyticsReporting: screenviewData :: ScreenviewData
+ Network.Google.AnalyticsReporting: sdAppName :: Lens' ScreenviewData (Maybe Text)
+ Network.Google.AnalyticsReporting: sdMobileDeviceBranding :: Lens' ScreenviewData (Maybe Text)
+ Network.Google.AnalyticsReporting: sdMobileDeviceModel :: Lens' ScreenviewData (Maybe Text)
+ Network.Google.AnalyticsReporting: sdScreenName :: Lens' ScreenviewData (Maybe Text)
+ Network.Google.AnalyticsReporting: searchUserActivityRequest :: SearchUserActivityRequest
+ Network.Google.AnalyticsReporting: searchUserActivityResponse :: SearchUserActivityResponse
+ Network.Google.AnalyticsReporting: suarActivityTypes :: Lens' SearchUserActivityRequest [Text]
+ Network.Google.AnalyticsReporting: suarDateRange :: Lens' SearchUserActivityRequest (Maybe DateRange)
+ Network.Google.AnalyticsReporting: suarNextPageToken :: Lens' SearchUserActivityResponse (Maybe Text)
+ Network.Google.AnalyticsReporting: suarPageSize :: Lens' SearchUserActivityRequest (Maybe Int32)
+ Network.Google.AnalyticsReporting: suarPageToken :: Lens' SearchUserActivityRequest (Maybe Text)
+ Network.Google.AnalyticsReporting: suarSampleRate :: Lens' SearchUserActivityResponse (Maybe Double)
+ Network.Google.AnalyticsReporting: suarSessions :: Lens' SearchUserActivityResponse [UserActivitySession]
+ Network.Google.AnalyticsReporting: suarTotalRows :: Lens' SearchUserActivityResponse (Maybe Int32)
+ Network.Google.AnalyticsReporting: suarUser :: Lens' SearchUserActivityRequest (Maybe User)
+ Network.Google.AnalyticsReporting: suarViewId :: Lens' SearchUserActivityRequest (Maybe Text)
+ Network.Google.AnalyticsReporting: tdTransactionId :: Lens' TransactionData (Maybe Text)
+ Network.Google.AnalyticsReporting: tdTransactionRevenue :: Lens' TransactionData (Maybe Double)
+ Network.Google.AnalyticsReporting: tdTransactionShipping :: Lens' TransactionData (Maybe Double)
+ Network.Google.AnalyticsReporting: tdTransactionTax :: Lens' TransactionData (Maybe Double)
+ Network.Google.AnalyticsReporting: transactionData :: TransactionData
+ Network.Google.AnalyticsReporting: uType :: Lens' User (Maybe UserType)
+ Network.Google.AnalyticsReporting: uUserId :: Lens' User (Maybe Text)
+ Network.Google.AnalyticsReporting: uasActivities :: Lens' UserActivitySession [Activity]
+ Network.Google.AnalyticsReporting: uasDataSource :: Lens' UserActivitySession (Maybe Text)
+ Network.Google.AnalyticsReporting: uasDeviceCategory :: Lens' UserActivitySession (Maybe Text)
+ Network.Google.AnalyticsReporting: uasPlatform :: Lens' UserActivitySession (Maybe Text)
+ Network.Google.AnalyticsReporting: uasSessionDate :: Lens' UserActivitySession (Maybe Text)
+ Network.Google.AnalyticsReporting: uasSessionId :: Lens' UserActivitySession (Maybe Text)
+ Network.Google.AnalyticsReporting: user :: User
+ Network.Google.AnalyticsReporting: userActivitySession :: UserActivitySession
+ Network.Google.AnalyticsReporting.Types: ActivityTypeUnspecified :: ActivityActivityType
+ Network.Google.AnalyticsReporting.Types: AddToCart :: EcommerceDataActionType
+ Network.Google.AnalyticsReporting.Types: Checkout :: EcommerceDataActionType
+ Network.Google.AnalyticsReporting.Types: CheckoutOption :: EcommerceDataActionType
+ Network.Google.AnalyticsReporting.Types: Classic :: EcommerceDataEcommerceType
+ Network.Google.AnalyticsReporting.Types: Click :: EcommerceDataActionType
+ Network.Google.AnalyticsReporting.Types: DetailsView :: EcommerceDataActionType
+ Network.Google.AnalyticsReporting.Types: Ecommerce :: ActivityActivityType
+ Network.Google.AnalyticsReporting.Types: EcommerceTypeUnspecified :: EcommerceDataEcommerceType
+ Network.Google.AnalyticsReporting.Types: Enhanced :: EcommerceDataEcommerceType
+ Network.Google.AnalyticsReporting.Types: Event :: ActivityActivityType
+ Network.Google.AnalyticsReporting.Types: Goal :: ActivityActivityType
+ Network.Google.AnalyticsReporting.Types: Pageview :: ActivityActivityType
+ Network.Google.AnalyticsReporting.Types: Payment :: EcommerceDataActionType
+ Network.Google.AnalyticsReporting.Types: Refund :: EcommerceDataActionType
+ Network.Google.AnalyticsReporting.Types: RemoveFromCart :: EcommerceDataActionType
+ Network.Google.AnalyticsReporting.Types: SMFSHit :: SegmentMetricFilterScope
+ Network.Google.AnalyticsReporting.Types: SMFSProduct :: SegmentMetricFilterScope
+ Network.Google.AnalyticsReporting.Types: SMFSSession :: SegmentMetricFilterScope
+ Network.Google.AnalyticsReporting.Types: SMFSUnspecifiedScope :: SegmentMetricFilterScope
+ Network.Google.AnalyticsReporting.Types: SMFSUser :: SegmentMetricFilterScope
+ Network.Google.AnalyticsReporting.Types: Screenview :: ActivityActivityType
+ Network.Google.AnalyticsReporting.Types: Unknown :: EcommerceDataActionType
+ Network.Google.AnalyticsReporting.Types: UserIdTypeClientId :: UserType
+ Network.Google.AnalyticsReporting.Types: UserIdTypeUnspecified :: UserType
+ Network.Google.AnalyticsReporting.Types: UserIdTypeUserId :: UserType
+ Network.Google.AnalyticsReporting.Types: aActivityTime :: Lens' Activity (Maybe UTCTime)
+ Network.Google.AnalyticsReporting.Types: aActivityType :: Lens' Activity (Maybe ActivityActivityType)
+ Network.Google.AnalyticsReporting.Types: aAppview :: Lens' Activity (Maybe ScreenviewData)
+ Network.Google.AnalyticsReporting.Types: aCampaign :: Lens' Activity (Maybe Text)
+ Network.Google.AnalyticsReporting.Types: aChannelGrouping :: Lens' Activity (Maybe Text)
+ Network.Google.AnalyticsReporting.Types: aCustomDimension :: Lens' Activity [CustomDimension]
+ Network.Google.AnalyticsReporting.Types: aEcommerce :: Lens' Activity (Maybe EcommerceData)
+ Network.Google.AnalyticsReporting.Types: aEvent :: Lens' Activity (Maybe EventData)
+ Network.Google.AnalyticsReporting.Types: aGoals :: Lens' Activity (Maybe GoalSetData)
+ Network.Google.AnalyticsReporting.Types: aHostname :: Lens' Activity (Maybe Text)
+ Network.Google.AnalyticsReporting.Types: aKeyword :: Lens' Activity (Maybe Text)
+ Network.Google.AnalyticsReporting.Types: aLandingPagePath :: Lens' Activity (Maybe Text)
+ Network.Google.AnalyticsReporting.Types: aMedium :: Lens' Activity (Maybe Text)
+ Network.Google.AnalyticsReporting.Types: aPageview :: Lens' Activity (Maybe PageviewData)
+ Network.Google.AnalyticsReporting.Types: aSource :: Lens' Activity (Maybe Text)
+ Network.Google.AnalyticsReporting.Types: activity :: Activity
+ Network.Google.AnalyticsReporting.Types: cdIndex :: Lens' CustomDimension (Maybe Int32)
+ Network.Google.AnalyticsReporting.Types: cdValue :: Lens' CustomDimension (Maybe Text)
+ Network.Google.AnalyticsReporting.Types: customDimension :: CustomDimension
+ Network.Google.AnalyticsReporting.Types: data Activity
+ Network.Google.AnalyticsReporting.Types: data ActivityActivityType
+ Network.Google.AnalyticsReporting.Types: data CustomDimension
+ Network.Google.AnalyticsReporting.Types: data EcommerceData
+ Network.Google.AnalyticsReporting.Types: data EcommerceDataActionType
+ Network.Google.AnalyticsReporting.Types: data EcommerceDataEcommerceType
+ Network.Google.AnalyticsReporting.Types: data EventData
+ Network.Google.AnalyticsReporting.Types: data GoalData
+ Network.Google.AnalyticsReporting.Types: data GoalSetData
+ Network.Google.AnalyticsReporting.Types: data PageviewData
+ Network.Google.AnalyticsReporting.Types: data ProductData
+ Network.Google.AnalyticsReporting.Types: data ScreenviewData
+ Network.Google.AnalyticsReporting.Types: data SearchUserActivityRequest
+ Network.Google.AnalyticsReporting.Types: data SearchUserActivityResponse
+ Network.Google.AnalyticsReporting.Types: data TransactionData
+ Network.Google.AnalyticsReporting.Types: data User
+ Network.Google.AnalyticsReporting.Types: data UserActivitySession
+ Network.Google.AnalyticsReporting.Types: data UserType
+ Network.Google.AnalyticsReporting.Types: ecommerceData :: EcommerceData
+ Network.Google.AnalyticsReporting.Types: edActionType :: Lens' EcommerceData (Maybe EcommerceDataActionType)
+ Network.Google.AnalyticsReporting.Types: edEcommerceType :: Lens' EcommerceData (Maybe EcommerceDataEcommerceType)
+ Network.Google.AnalyticsReporting.Types: edEventAction :: Lens' EventData (Maybe Text)
+ Network.Google.AnalyticsReporting.Types: edEventCategory :: Lens' EventData (Maybe Text)
+ Network.Google.AnalyticsReporting.Types: edEventCount :: Lens' EventData (Maybe Int64)
+ Network.Google.AnalyticsReporting.Types: edEventLabel :: Lens' EventData (Maybe Text)
+ Network.Google.AnalyticsReporting.Types: edEventValue :: Lens' EventData (Maybe Int64)
+ Network.Google.AnalyticsReporting.Types: edProducts :: Lens' EcommerceData [ProductData]
+ Network.Google.AnalyticsReporting.Types: edTransaction :: Lens' EcommerceData (Maybe TransactionData)
+ Network.Google.AnalyticsReporting.Types: eventData :: EventData
+ Network.Google.AnalyticsReporting.Types: gdGoalCompletionLocation :: Lens' GoalData (Maybe Text)
+ Network.Google.AnalyticsReporting.Types: gdGoalCompletions :: Lens' GoalData (Maybe Int64)
+ Network.Google.AnalyticsReporting.Types: gdGoalIndex :: Lens' GoalData (Maybe Int32)
+ Network.Google.AnalyticsReporting.Types: gdGoalName :: Lens' GoalData (Maybe Text)
+ Network.Google.AnalyticsReporting.Types: gdGoalPreviousStep1 :: Lens' GoalData (Maybe Text)
+ Network.Google.AnalyticsReporting.Types: gdGoalPreviousStep2 :: Lens' GoalData (Maybe Text)
+ Network.Google.AnalyticsReporting.Types: gdGoalPreviousStep3 :: Lens' GoalData (Maybe Text)
+ Network.Google.AnalyticsReporting.Types: gdGoalValue :: Lens' GoalData (Maybe Double)
+ Network.Google.AnalyticsReporting.Types: goalData :: GoalData
+ Network.Google.AnalyticsReporting.Types: goalSetData :: GoalSetData
+ Network.Google.AnalyticsReporting.Types: gsdGoals :: Lens' GoalSetData [GoalData]
+ Network.Google.AnalyticsReporting.Types: pageviewData :: PageviewData
+ Network.Google.AnalyticsReporting.Types: pdItemRevenue :: Lens' ProductData (Maybe Double)
+ Network.Google.AnalyticsReporting.Types: pdPagePath :: Lens' PageviewData (Maybe Text)
+ Network.Google.AnalyticsReporting.Types: pdPageTitle :: Lens' PageviewData (Maybe Text)
+ Network.Google.AnalyticsReporting.Types: pdProductName :: Lens' ProductData (Maybe Text)
+ Network.Google.AnalyticsReporting.Types: pdProductQuantity :: Lens' ProductData (Maybe Int64)
+ Network.Google.AnalyticsReporting.Types: pdProductSKU :: Lens' ProductData (Maybe Text)
+ Network.Google.AnalyticsReporting.Types: productData :: ProductData
+ Network.Google.AnalyticsReporting.Types: screenviewData :: ScreenviewData
+ Network.Google.AnalyticsReporting.Types: sdAppName :: Lens' ScreenviewData (Maybe Text)
+ Network.Google.AnalyticsReporting.Types: sdMobileDeviceBranding :: Lens' ScreenviewData (Maybe Text)
+ Network.Google.AnalyticsReporting.Types: sdMobileDeviceModel :: Lens' ScreenviewData (Maybe Text)
+ Network.Google.AnalyticsReporting.Types: sdScreenName :: Lens' ScreenviewData (Maybe Text)
+ Network.Google.AnalyticsReporting.Types: searchUserActivityRequest :: SearchUserActivityRequest
+ Network.Google.AnalyticsReporting.Types: searchUserActivityResponse :: SearchUserActivityResponse
+ Network.Google.AnalyticsReporting.Types: suarActivityTypes :: Lens' SearchUserActivityRequest [Text]
+ Network.Google.AnalyticsReporting.Types: suarDateRange :: Lens' SearchUserActivityRequest (Maybe DateRange)
+ Network.Google.AnalyticsReporting.Types: suarNextPageToken :: Lens' SearchUserActivityResponse (Maybe Text)
+ Network.Google.AnalyticsReporting.Types: suarPageSize :: Lens' SearchUserActivityRequest (Maybe Int32)
+ Network.Google.AnalyticsReporting.Types: suarPageToken :: Lens' SearchUserActivityRequest (Maybe Text)
+ Network.Google.AnalyticsReporting.Types: suarSampleRate :: Lens' SearchUserActivityResponse (Maybe Double)
+ Network.Google.AnalyticsReporting.Types: suarSessions :: Lens' SearchUserActivityResponse [UserActivitySession]
+ Network.Google.AnalyticsReporting.Types: suarTotalRows :: Lens' SearchUserActivityResponse (Maybe Int32)
+ Network.Google.AnalyticsReporting.Types: suarUser :: Lens' SearchUserActivityRequest (Maybe User)
+ Network.Google.AnalyticsReporting.Types: suarViewId :: Lens' SearchUserActivityRequest (Maybe Text)
+ Network.Google.AnalyticsReporting.Types: tdTransactionId :: Lens' TransactionData (Maybe Text)
+ Network.Google.AnalyticsReporting.Types: tdTransactionRevenue :: Lens' TransactionData (Maybe Double)
+ Network.Google.AnalyticsReporting.Types: tdTransactionShipping :: Lens' TransactionData (Maybe Double)
+ Network.Google.AnalyticsReporting.Types: tdTransactionTax :: Lens' TransactionData (Maybe Double)
+ Network.Google.AnalyticsReporting.Types: transactionData :: TransactionData
+ Network.Google.AnalyticsReporting.Types: uType :: Lens' User (Maybe UserType)
+ Network.Google.AnalyticsReporting.Types: uUserId :: Lens' User (Maybe Text)
+ Network.Google.AnalyticsReporting.Types: uasActivities :: Lens' UserActivitySession [Activity]
+ Network.Google.AnalyticsReporting.Types: uasDataSource :: Lens' UserActivitySession (Maybe Text)
+ Network.Google.AnalyticsReporting.Types: uasDeviceCategory :: Lens' UserActivitySession (Maybe Text)
+ Network.Google.AnalyticsReporting.Types: uasPlatform :: Lens' UserActivitySession (Maybe Text)
+ Network.Google.AnalyticsReporting.Types: uasSessionDate :: Lens' UserActivitySession (Maybe Text)
+ Network.Google.AnalyticsReporting.Types: uasSessionId :: Lens' UserActivitySession (Maybe Text)
+ Network.Google.AnalyticsReporting.Types: user :: User
+ Network.Google.AnalyticsReporting.Types: userActivitySession :: UserActivitySession
+ Network.Google.Resource.AnalyticsReporting.UserActivity.Search: data UserActivitySearch
+ Network.Google.Resource.AnalyticsReporting.UserActivity.Search: instance Data.Data.Data Network.Google.Resource.AnalyticsReporting.UserActivity.Search.UserActivitySearch
+ Network.Google.Resource.AnalyticsReporting.UserActivity.Search: instance GHC.Classes.Eq Network.Google.Resource.AnalyticsReporting.UserActivity.Search.UserActivitySearch
+ Network.Google.Resource.AnalyticsReporting.UserActivity.Search: instance GHC.Generics.Generic Network.Google.Resource.AnalyticsReporting.UserActivity.Search.UserActivitySearch
+ Network.Google.Resource.AnalyticsReporting.UserActivity.Search: instance GHC.Show.Show Network.Google.Resource.AnalyticsReporting.UserActivity.Search.UserActivitySearch
+ Network.Google.Resource.AnalyticsReporting.UserActivity.Search: instance Network.Google.Types.GoogleRequest Network.Google.Resource.AnalyticsReporting.UserActivity.Search.UserActivitySearch
+ Network.Google.Resource.AnalyticsReporting.UserActivity.Search: type UserActivitySearchResource = "v4" :> "userActivity:search" :> QueryParam "$.xgafv" Xgafv :> QueryParam "upload_protocol" Text :> QueryParam "access_token" Text :> QueryParam "uploadType" Text :> QueryParam "callback" Text :> QueryParam "alt" AltJSON :> ReqBody '[JSON] SearchUserActivityRequest :> Post '[JSON] SearchUserActivityResponse
+ Network.Google.Resource.AnalyticsReporting.UserActivity.Search: uasAccessToken :: Lens' UserActivitySearch (Maybe Text)
+ Network.Google.Resource.AnalyticsReporting.UserActivity.Search: uasCallback :: Lens' UserActivitySearch (Maybe Text)
+ Network.Google.Resource.AnalyticsReporting.UserActivity.Search: uasPayload :: Lens' UserActivitySearch SearchUserActivityRequest
+ Network.Google.Resource.AnalyticsReporting.UserActivity.Search: uasUploadProtocol :: Lens' UserActivitySearch (Maybe Text)
+ Network.Google.Resource.AnalyticsReporting.UserActivity.Search: uasUploadType :: Lens' UserActivitySearch (Maybe Text)
+ Network.Google.Resource.AnalyticsReporting.UserActivity.Search: uasXgafv :: Lens' UserActivitySearch (Maybe Xgafv)
+ Network.Google.Resource.AnalyticsReporting.UserActivity.Search: userActivitySearch :: SearchUserActivityRequest -> UserActivitySearch
- Network.Google.AnalyticsReporting: type AnalyticsReportingAPI = ReportsBatchGetResource
+ Network.Google.AnalyticsReporting: type AnalyticsReportingAPI = ReportsBatchGetResource :<|> UserActivitySearchResource

Files

README.md view
@@ -8,7 +8,7 @@  ## Version -`0.3.0`+`0.5.0`   ## Description
gen/Network/Google/AnalyticsReporting.hs view
@@ -33,6 +33,9 @@     -- ** analyticsreporting.reports.batchGet     , module Network.Google.Resource.AnalyticsReporting.Reports.BatchGet +    -- ** analyticsreporting.userActivity.search+    , module Network.Google.Resource.AnalyticsReporting.UserActivity.Search+     -- * Types      -- ** MetricFilter@@ -43,6 +46,15 @@     , mfMetricName     , mfComparisonValue +    -- ** EventData+    , EventData+    , eventData+    , edEventCategory+    , edEventCount+    , edEventValue+    , edEventLabel+    , edEventAction+     -- ** MetricFilterOperator     , MetricFilterOperator (..) @@ -91,6 +103,11 @@     , mheName     , mheType +    -- ** GoalSetData+    , GoalSetData+    , goalSetData+    , gsdGoals+     -- ** CohortGroup     , CohortGroup     , cohortGroup@@ -139,6 +156,16 @@     , phTotalPivotGroupsCount     , phPivotHeaderEntries +    -- ** SearchUserActivityRequest+    , SearchUserActivityRequest+    , searchUserActivityRequest+    , suarViewId+    , suarDateRange+    , suarUser+    , suarPageToken+    , suarPageSize+    , suarActivityTypes+     -- ** MetricHeader     , MetricHeader     , metricHeader@@ -168,6 +195,15 @@     , rData     , rColumnHeader +    -- ** PageviewData+    , PageviewData+    , pageviewData+    , pdPageTitle+    , pdPagePath++    -- ** EcommerceDataActionType+    , EcommerceDataActionType (..)+     -- ** ReportData     , ReportData     , reportData@@ -207,6 +243,12 @@     -- ** OrderBySortOrder     , OrderBySortOrder (..) +    -- ** User+    , User+    , user+    , uUserId+    , uType+     -- ** Pivot     , Pivot     , pivot@@ -216,6 +258,14 @@     , pDimensions     , pDimensionFilterClauses +    -- ** TransactionData+    , TransactionData+    , transactionData+    , tdTransactionId+    , tdTransactionTax+    , tdTransactionShipping+    , tdTransactionRevenue+     -- ** SequenceSegment     , SequenceSegment     , sequenceSegment@@ -256,9 +306,50 @@     , grrUseResourceQuotas     , grrReportRequests +    -- ** UserActivitySession+    , UserActivitySession+    , userActivitySession+    , uasPlatform+    , uasDeviceCategory+    , uasActivities+    , uasSessionDate+    , uasDataSource+    , uasSessionId+     -- ** SegmentSequenceStepMatchType     , SegmentSequenceStepMatchType (..) +    -- ** GoalData+    , GoalData+    , goalData+    , gdGoalPreviousStep2+    , gdGoalName+    , gdGoalPreviousStep3+    , gdGoalIndex+    , gdGoalCompletionLocation+    , gdGoalPreviousStep1+    , gdGoalCompletions+    , gdGoalValue++    -- ** Activity+    , Activity+    , activity+    , aEvent+    , aHostname+    , aActivityType+    , aMedium+    , aPageview+    , aCampaign+    , aGoals+    , aChannelGrouping+    , aAppview+    , aSource+    , aActivityTime+    , aEcommerce+    , aCustomDimension+    , aKeyword+    , aLandingPagePath+     -- ** Cohort     , Cohort     , cohort@@ -269,6 +360,17 @@     -- ** SegmentMetricFilterScope     , SegmentMetricFilterScope (..) +    -- ** EcommerceData+    , EcommerceData+    , ecommerceData+    , edEcommerceType+    , edTransaction+    , edProducts+    , edActionType++    -- ** EcommerceDataEcommerceType+    , EcommerceDataEcommerceType (..)+     -- ** DimensionFilter     , DimensionFilter     , dimensionFilter@@ -288,15 +390,32 @@     -- ** DimensionFilterOperator     , DimensionFilterOperator (..) +    -- ** ActivityActivityType+    , ActivityActivityType (..)+     -- ** MetricFormattingType     , MetricFormattingType (..) +    -- ** CustomDimension+    , CustomDimension+    , customDimension+    , cdValue+    , cdIndex+     -- ** Segment     , Segment     , segment     , sDynamicSegment     , sSegmentId +    -- ** ProductData+    , ProductData+    , productData+    , pdProductName+    , pdProductSKU+    , pdItemRevenue+    , pdProductQuantity+     -- ** SegmentDimensionFilterOperator     , SegmentDimensionFilterOperator (..) @@ -332,20 +451,42 @@     -- ** MetricFilterClauseOperator     , MetricFilterClauseOperator (..) +    -- ** UserType+    , UserType (..)+     -- ** ColumnHeader     , ColumnHeader     , columnHeader     , chMetricHeader     , chDimensions++    -- ** SearchUserActivityResponse+    , SearchUserActivityResponse+    , searchUserActivityResponse+    , suarNextPageToken+    , suarSampleRate+    , suarSessions+    , suarTotalRows++    -- ** ScreenviewData+    , ScreenviewData+    , screenviewData+    , sdMobileDeviceModel+    , sdMobileDeviceBranding+    , sdAppName+    , sdScreenName     ) where  import           Network.Google.AnalyticsReporting.Types import           Network.Google.Prelude import           Network.Google.Resource.AnalyticsReporting.Reports.BatchGet+import           Network.Google.Resource.AnalyticsReporting.UserActivity.Search  {- $resources TODO -}  -- | Represents the entirety of the methods and resources available for the Analytics Reporting API service.-type AnalyticsReportingAPI = ReportsBatchGetResource+type AnalyticsReportingAPI =+     ReportsBatchGetResource :<|>+       UserActivitySearchResource
gen/Network/Google/AnalyticsReporting/Types.hs view
@@ -31,6 +31,15 @@     , mfMetricName     , mfComparisonValue +    -- * EventData+    , EventData+    , eventData+    , edEventCategory+    , edEventCount+    , edEventValue+    , edEventLabel+    , edEventAction+     -- * MetricFilterOperator     , MetricFilterOperator (..) @@ -79,6 +88,11 @@     , mheName     , mheType +    -- * GoalSetData+    , GoalSetData+    , goalSetData+    , gsdGoals+     -- * CohortGroup     , CohortGroup     , cohortGroup@@ -127,6 +141,16 @@     , phTotalPivotGroupsCount     , phPivotHeaderEntries +    -- * SearchUserActivityRequest+    , SearchUserActivityRequest+    , searchUserActivityRequest+    , suarViewId+    , suarDateRange+    , suarUser+    , suarPageToken+    , suarPageSize+    , suarActivityTypes+     -- * MetricHeader     , MetricHeader     , metricHeader@@ -156,6 +180,15 @@     , rData     , rColumnHeader +    -- * PageviewData+    , PageviewData+    , pageviewData+    , pdPageTitle+    , pdPagePath++    -- * EcommerceDataActionType+    , EcommerceDataActionType (..)+     -- * ReportData     , ReportData     , reportData@@ -195,6 +228,12 @@     -- * OrderBySortOrder     , OrderBySortOrder (..) +    -- * User+    , User+    , user+    , uUserId+    , uType+     -- * Pivot     , Pivot     , pivot@@ -204,6 +243,14 @@     , pDimensions     , pDimensionFilterClauses +    -- * TransactionData+    , TransactionData+    , transactionData+    , tdTransactionId+    , tdTransactionTax+    , tdTransactionShipping+    , tdTransactionRevenue+     -- * SequenceSegment     , SequenceSegment     , sequenceSegment@@ -244,9 +291,50 @@     , grrUseResourceQuotas     , grrReportRequests +    -- * UserActivitySession+    , UserActivitySession+    , userActivitySession+    , uasPlatform+    , uasDeviceCategory+    , uasActivities+    , uasSessionDate+    , uasDataSource+    , uasSessionId+     -- * SegmentSequenceStepMatchType     , SegmentSequenceStepMatchType (..) +    -- * GoalData+    , GoalData+    , goalData+    , gdGoalPreviousStep2+    , gdGoalName+    , gdGoalPreviousStep3+    , gdGoalIndex+    , gdGoalCompletionLocation+    , gdGoalPreviousStep1+    , gdGoalCompletions+    , gdGoalValue++    -- * Activity+    , Activity+    , activity+    , aEvent+    , aHostname+    , aActivityType+    , aMedium+    , aPageview+    , aCampaign+    , aGoals+    , aChannelGrouping+    , aAppview+    , aSource+    , aActivityTime+    , aEcommerce+    , aCustomDimension+    , aKeyword+    , aLandingPagePath+     -- * Cohort     , Cohort     , cohort@@ -257,6 +345,17 @@     -- * SegmentMetricFilterScope     , SegmentMetricFilterScope (..) +    -- * EcommerceData+    , EcommerceData+    , ecommerceData+    , edEcommerceType+    , edTransaction+    , edProducts+    , edActionType++    -- * EcommerceDataEcommerceType+    , EcommerceDataEcommerceType (..)+     -- * DimensionFilter     , DimensionFilter     , dimensionFilter@@ -276,15 +375,32 @@     -- * DimensionFilterOperator     , DimensionFilterOperator (..) +    -- * ActivityActivityType+    , ActivityActivityType (..)+     -- * MetricFormattingType     , MetricFormattingType (..) +    -- * CustomDimension+    , CustomDimension+    , customDimension+    , cdValue+    , cdIndex+     -- * Segment     , Segment     , segment     , sDynamicSegment     , sSegmentId +    -- * ProductData+    , ProductData+    , productData+    , pdProductName+    , pdProductSKU+    , pdItemRevenue+    , pdProductQuantity+     -- * SegmentDimensionFilterOperator     , SegmentDimensionFilterOperator (..) @@ -320,11 +436,30 @@     -- * MetricFilterClauseOperator     , MetricFilterClauseOperator (..) +    -- * UserType+    , UserType (..)+     -- * ColumnHeader     , ColumnHeader     , columnHeader     , chMetricHeader     , chDimensions++    -- * SearchUserActivityResponse+    , SearchUserActivityResponse+    , searchUserActivityResponse+    , suarNextPageToken+    , suarSampleRate+    , suarSessions+    , suarTotalRows++    -- * ScreenviewData+    , ScreenviewData+    , screenviewData+    , sdMobileDeviceModel+    , sdMobileDeviceBranding+    , sdAppName+    , sdScreenName     ) where  import           Network.Google.AnalyticsReporting.Types.Product@@ -339,8 +474,8 @@  -- | View and manage your Google Analytics data analyticsScope :: Proxy '["https://www.googleapis.com/auth/analytics"]-analyticsScope = Proxy;+analyticsScope = Proxy  -- | View your Google Analytics data analyticsReadOnlyScope :: Proxy '["https://www.googleapis.com/auth/analytics.readonly"]-analyticsReadOnlyScope = Proxy;+analyticsReadOnlyScope = Proxy
gen/Network/Google/AnalyticsReporting/Types/Product.hs view
@@ -23,2560 +23,3864 @@ -- | MetricFilter specifies the filter on a metric. -- -- /See:/ 'metricFilter' smart constructor.-data MetricFilter = MetricFilter'-    { _mfNot             :: !(Maybe Bool)-    , _mfOperator        :: !(Maybe MetricFilterOperator)-    , _mfMetricName      :: !(Maybe Text)-    , _mfComparisonValue :: !(Maybe Text)-    } deriving (Eq,Show,Data,Typeable,Generic)---- | Creates a value of 'MetricFilter' with the minimum fields required to make a request.------ Use one of the following lenses to modify other fields as desired:------ * 'mfNot'------ * 'mfOperator'------ * 'mfMetricName'------ * 'mfComparisonValue'-metricFilter-    :: MetricFilter-metricFilter =-    MetricFilter'-    { _mfNot = Nothing-    , _mfOperator = Nothing-    , _mfMetricName = Nothing-    , _mfComparisonValue = Nothing-    }---- | Logical \`NOT\` operator. If this boolean is set to true, then the--- matching metric values will be excluded in the report. The default is--- false.-mfNot :: Lens' MetricFilter (Maybe Bool)-mfNot = lens _mfNot (\ s a -> s{_mfNot = a})---- | Is the metric \`EQUAL\`, \`LESS_THAN\` or \`GREATER_THAN\` the--- comparisonValue, the default is \`EQUAL\`. If the operator is--- \`IS_MISSING\`, checks if the metric is missing and would ignore the--- comparisonValue.-mfOperator :: Lens' MetricFilter (Maybe MetricFilterOperator)-mfOperator-  = lens _mfOperator (\ s a -> s{_mfOperator = a})---- | The metric that will be filtered on. A metricFilter must contain a--- metric name. A metric name can be an alias earlier defined as a metric--- or it can also be a metric expression.-mfMetricName :: Lens' MetricFilter (Maybe Text)-mfMetricName-  = lens _mfMetricName (\ s a -> s{_mfMetricName = a})---- | The value to compare against.-mfComparisonValue :: Lens' MetricFilter (Maybe Text)-mfComparisonValue-  = lens _mfComparisonValue-      (\ s a -> s{_mfComparisonValue = a})--instance FromJSON MetricFilter where-        parseJSON-          = withObject "MetricFilter"-              (\ o ->-                 MetricFilter' <$>-                   (o .:? "not") <*> (o .:? "operator") <*>-                     (o .:? "metricName")-                     <*> (o .:? "comparisonValue"))--instance ToJSON MetricFilter where-        toJSON MetricFilter'{..}-          = object-              (catMaybes-                 [("not" .=) <$> _mfNot,-                  ("operator" .=) <$> _mfOperator,-                  ("metricName" .=) <$> _mfMetricName,-                  ("comparisonValue" .=) <$> _mfComparisonValue])---- | A row in the report.------ /See:/ 'reportRow' smart constructor.-data ReportRow = ReportRow'-    { _rrMetrics    :: !(Maybe [DateRangeValues])-    , _rrDimensions :: !(Maybe [Text])-    } deriving (Eq,Show,Data,Typeable,Generic)---- | Creates a value of 'ReportRow' with the minimum fields required to make a request.------ Use one of the following lenses to modify other fields as desired:------ * 'rrMetrics'------ * 'rrDimensions'-reportRow-    :: ReportRow-reportRow =-    ReportRow'-    { _rrMetrics = Nothing-    , _rrDimensions = Nothing-    }---- | List of metrics for each requested DateRange.-rrMetrics :: Lens' ReportRow [DateRangeValues]-rrMetrics-  = lens _rrMetrics (\ s a -> s{_rrMetrics = a}) .-      _Default-      . _Coerce---- | List of requested dimensions.-rrDimensions :: Lens' ReportRow [Text]-rrDimensions-  = lens _rrDimensions (\ s a -> s{_rrDimensions = a})-      . _Default-      . _Coerce--instance FromJSON ReportRow where-        parseJSON-          = withObject "ReportRow"-              (\ o ->-                 ReportRow' <$>-                   (o .:? "metrics" .!= mempty) <*>-                     (o .:? "dimensions" .!= mempty))--instance ToJSON ReportRow where-        toJSON ReportRow'{..}-          = object-              (catMaybes-                 [("metrics" .=) <$> _rrMetrics,-                  ("dimensions" .=) <$> _rrDimensions])---- | The headers for the each of the metric column corresponding to the--- metrics requested in the pivots section of the response.------ /See:/ 'pivotHeaderEntry' smart constructor.-data PivotHeaderEntry = PivotHeaderEntry'-    { _pheDimensionValues :: !(Maybe [Text])-    , _pheDimensionNames  :: !(Maybe [Text])-    , _pheMetric          :: !(Maybe MetricHeaderEntry)-    } deriving (Eq,Show,Data,Typeable,Generic)---- | Creates a value of 'PivotHeaderEntry' with the minimum fields required to make a request.------ Use one of the following lenses to modify other fields as desired:------ * 'pheDimensionValues'------ * 'pheDimensionNames'------ * 'pheMetric'-pivotHeaderEntry-    :: PivotHeaderEntry-pivotHeaderEntry =-    PivotHeaderEntry'-    { _pheDimensionValues = Nothing-    , _pheDimensionNames = Nothing-    , _pheMetric = Nothing-    }---- | The values for the dimensions in the pivot.-pheDimensionValues :: Lens' PivotHeaderEntry [Text]-pheDimensionValues-  = lens _pheDimensionValues-      (\ s a -> s{_pheDimensionValues = a})-      . _Default-      . _Coerce---- | The name of the dimensions in the pivot response.-pheDimensionNames :: Lens' PivotHeaderEntry [Text]-pheDimensionNames-  = lens _pheDimensionNames-      (\ s a -> s{_pheDimensionNames = a})-      . _Default-      . _Coerce---- | The metric header for the metric in the pivot.-pheMetric :: Lens' PivotHeaderEntry (Maybe MetricHeaderEntry)-pheMetric-  = lens _pheMetric (\ s a -> s{_pheMetric = a})--instance FromJSON PivotHeaderEntry where-        parseJSON-          = withObject "PivotHeaderEntry"-              (\ o ->-                 PivotHeaderEntry' <$>-                   (o .:? "dimensionValues" .!= mempty) <*>-                     (o .:? "dimensionNames" .!= mempty)-                     <*> (o .:? "metric"))--instance ToJSON PivotHeaderEntry where-        toJSON PivotHeaderEntry'{..}-          = object-              (catMaybes-                 [("dimensionValues" .=) <$> _pheDimensionValues,-                  ("dimensionNames" .=) <$> _pheDimensionNames,-                  ("metric" .=) <$> _pheMetric])---- | The metric values in the pivot region.------ /See:/ 'pivotValueRegion' smart constructor.-newtype PivotValueRegion = PivotValueRegion'-    { _pvrValues :: Maybe [Text]-    } deriving (Eq,Show,Data,Typeable,Generic)---- | Creates a value of 'PivotValueRegion' with the minimum fields required to make a request.------ Use one of the following lenses to modify other fields as desired:------ * 'pvrValues'-pivotValueRegion-    :: PivotValueRegion-pivotValueRegion =-    PivotValueRegion'-    { _pvrValues = Nothing-    }---- | The values of the metrics in each of the pivot regions.-pvrValues :: Lens' PivotValueRegion [Text]-pvrValues-  = lens _pvrValues (\ s a -> s{_pvrValues = a}) .-      _Default-      . _Coerce--instance FromJSON PivotValueRegion where-        parseJSON-          = withObject "PivotValueRegion"-              (\ o ->-                 PivotValueRegion' <$> (o .:? "values" .!= mempty))--instance ToJSON PivotValueRegion where-        toJSON PivotValueRegion'{..}-          = object (catMaybes [("values" .=) <$> _pvrValues])---- | The main request class which specifies the Reporting API request.------ /See:/ 'reportRequest' smart constructor.-data ReportRequest = ReportRequest'-    { _rMetrics                :: !(Maybe [Metric])-    , _rPivots                 :: !(Maybe [Pivot])-    , _rCohortGroup            :: !(Maybe CohortGroup)-    , _rSamplingLevel          :: !(Maybe ReportRequestSamplingLevel)-    , _rIncludeEmptyRows       :: !(Maybe Bool)-    , _rDateRanges             :: !(Maybe [DateRange])-    , _rViewId                 :: !(Maybe Text)-    , _rHideTotals             :: !(Maybe Bool)-    , _rHideValueRanges        :: !(Maybe Bool)-    , _rMetricFilterClauses    :: !(Maybe [MetricFilterClause])-    , _rSegments               :: !(Maybe [Segment])-    , _rPageToken              :: !(Maybe Text)-    , _rDimensions             :: !(Maybe [Dimension])-    , _rDimensionFilterClauses :: !(Maybe [DimensionFilterClause])-    , _rPageSize               :: !(Maybe (Textual Int32))-    , _rOrderBys               :: !(Maybe [OrderBy])-    , _rFiltersExpression      :: !(Maybe Text)-    } deriving (Eq,Show,Data,Typeable,Generic)---- | Creates a value of 'ReportRequest' with the minimum fields required to make a request.------ Use one of the following lenses to modify other fields as desired:------ * 'rMetrics'------ * 'rPivots'------ * 'rCohortGroup'------ * 'rSamplingLevel'------ * 'rIncludeEmptyRows'------ * 'rDateRanges'------ * 'rViewId'------ * 'rHideTotals'------ * 'rHideValueRanges'------ * 'rMetricFilterClauses'------ * 'rSegments'------ * 'rPageToken'------ * 'rDimensions'------ * 'rDimensionFilterClauses'------ * 'rPageSize'------ * 'rOrderBys'------ * 'rFiltersExpression'-reportRequest-    :: ReportRequest-reportRequest =-    ReportRequest'-    { _rMetrics = Nothing-    , _rPivots = Nothing-    , _rCohortGroup = Nothing-    , _rSamplingLevel = Nothing-    , _rIncludeEmptyRows = Nothing-    , _rDateRanges = Nothing-    , _rViewId = Nothing-    , _rHideTotals = Nothing-    , _rHideValueRanges = Nothing-    , _rMetricFilterClauses = Nothing-    , _rSegments = Nothing-    , _rPageToken = Nothing-    , _rDimensions = Nothing-    , _rDimensionFilterClauses = Nothing-    , _rPageSize = Nothing-    , _rOrderBys = Nothing-    , _rFiltersExpression = Nothing-    }---- | The metrics requested. Requests must specify at least one metric.--- Requests can have a total of 10 metrics.-rMetrics :: Lens' ReportRequest [Metric]-rMetrics-  = lens _rMetrics (\ s a -> s{_rMetrics = a}) .-      _Default-      . _Coerce---- | The pivot definitions. Requests can have a maximum of 2 pivots.-rPivots :: Lens' ReportRequest [Pivot]-rPivots-  = lens _rPivots (\ s a -> s{_rPivots = a}) . _Default-      . _Coerce---- | Cohort group associated with this request. If there is a cohort group in--- the request the \`ga:cohort\` dimension must be present. Every--- [ReportRequest](#ReportRequest) within a \`batchGet\` method must--- contain the same \`cohortGroup\` definition.-rCohortGroup :: Lens' ReportRequest (Maybe CohortGroup)-rCohortGroup-  = lens _rCohortGroup (\ s a -> s{_rCohortGroup = a})---- | The desired report--- [sample](https:\/\/support.google.com\/analytics\/answer\/2637192) size.--- If the the \`samplingLevel\` field is unspecified the \`DEFAULT\`--- sampling level is used. Every [ReportRequest](#ReportRequest) within a--- \`batchGet\` method must contain the same \`samplingLevel\` definition.--- See [developer--- guide](\/analytics\/devguides\/reporting\/core\/v4\/basics#sampling) for--- details.-rSamplingLevel :: Lens' ReportRequest (Maybe ReportRequestSamplingLevel)-rSamplingLevel-  = lens _rSamplingLevel-      (\ s a -> s{_rSamplingLevel = a})---- | If set to false, the response does not include rows if all the retrieved--- metrics are equal to zero. The default is false which will exclude these--- rows.-rIncludeEmptyRows :: Lens' ReportRequest (Maybe Bool)-rIncludeEmptyRows-  = lens _rIncludeEmptyRows-      (\ s a -> s{_rIncludeEmptyRows = a})---- | Date ranges in the request. The request can have a maximum of 2 date--- ranges. The response will contain a set of metric values for each--- combination of the dimensions for each date range in the request. So, if--- there are two date ranges, there will be two set of metric values, one--- for the original date range and one for the second date range. The--- \`reportRequest.dateRanges\` field should not be specified for cohorts--- or Lifetime value requests. If a date range is not provided, the default--- date range is (startDate: current date - 7 days, endDate: current date ---- 1 day). Every [ReportRequest](#ReportRequest) within a \`batchGet\`--- method must contain the same \`dateRanges\` definition.-rDateRanges :: Lens' ReportRequest [DateRange]-rDateRanges-  = lens _rDateRanges (\ s a -> s{_rDateRanges = a}) .-      _Default-      . _Coerce---- | The Analytics [view--- ID](https:\/\/support.google.com\/analytics\/answer\/1009618) from which--- to retrieve data. Every [ReportRequest](#ReportRequest) within a--- \`batchGet\` method must contain the same \`viewId\`.-rViewId :: Lens' ReportRequest (Maybe Text)-rViewId = lens _rViewId (\ s a -> s{_rViewId = a})---- | If set to true, hides the total of all metrics for all the matching--- rows, for every date range. The default false and will return the--- totals.-rHideTotals :: Lens' ReportRequest (Maybe Bool)-rHideTotals-  = lens _rHideTotals (\ s a -> s{_rHideTotals = a})---- | If set to true, hides the minimum and maximum across all matching rows.--- The default is false and the value ranges are returned.-rHideValueRanges :: Lens' ReportRequest (Maybe Bool)-rHideValueRanges-  = lens _rHideValueRanges-      (\ s a -> s{_rHideValueRanges = a})---- | The metric filter clauses. They are logically combined with the \`AND\`--- operator. Metric filters look at only the first date range and not the--- comparing date range. Note that filtering on metrics occurs after the--- metrics are aggregated.-rMetricFilterClauses :: Lens' ReportRequest [MetricFilterClause]-rMetricFilterClauses-  = lens _rMetricFilterClauses-      (\ s a -> s{_rMetricFilterClauses = a})-      . _Default-      . _Coerce---- | Segment the data returned for the request. A segment definition helps--- look at a subset of the segment request. A request can contain up to--- four segments. Every [ReportRequest](#ReportRequest) within a--- \`batchGet\` method must contain the same \`segments\` definition.--- Requests with segments must have the \`ga:segment\` dimension.-rSegments :: Lens' ReportRequest [Segment]-rSegments-  = lens _rSegments (\ s a -> s{_rSegments = a}) .-      _Default-      . _Coerce---- | A continuation token to get the next page of the results. Adding this to--- the request will return the rows after the pageToken. The pageToken--- should be the value returned in the nextPageToken parameter in the--- response to the GetReports request.-rPageToken :: Lens' ReportRequest (Maybe Text)-rPageToken-  = lens _rPageToken (\ s a -> s{_rPageToken = a})---- | The dimensions requested. Requests can have a total of 7 dimensions.-rDimensions :: Lens' ReportRequest [Dimension]-rDimensions-  = lens _rDimensions (\ s a -> s{_rDimensions = a}) .-      _Default-      . _Coerce---- | The dimension filter clauses for filtering Dimension Values. They are--- logically combined with the \`AND\` operator. Note that filtering occurs--- before any dimensions are aggregated, so that the returned metrics--- represent the total for only the relevant dimensions.-rDimensionFilterClauses :: Lens' ReportRequest [DimensionFilterClause]-rDimensionFilterClauses-  = lens _rDimensionFilterClauses-      (\ s a -> s{_rDimensionFilterClauses = a})-      . _Default-      . _Coerce---- | Page size is for paging and specifies the maximum number of returned--- rows. Page size should be >= 0. A query returns the default of 1,000--- rows. The Analytics Core Reporting API returns a maximum of 100,000 rows--- per request, no matter how many you ask for. It can also return fewer--- rows than requested, if there aren\'t as many dimension segments as you--- expect. For instance, there are fewer than 300 possible values for--- \`ga:country\`, so when segmenting only by country, you can\'t get more--- than 300 rows, even if you set \`pageSize\` to a higher value.-rPageSize :: Lens' ReportRequest (Maybe Int32)-rPageSize-  = lens _rPageSize (\ s a -> s{_rPageSize = a}) .-      mapping _Coerce---- | Sort order on output rows. To compare two rows, the elements of the--- following are applied in order until a difference is found. All date--- ranges in the output get the same row order.-rOrderBys :: Lens' ReportRequest [OrderBy]-rOrderBys-  = lens _rOrderBys (\ s a -> s{_rOrderBys = a}) .-      _Default-      . _Coerce---- | Dimension or metric filters that restrict the data returned for your--- request. To use the \`filtersExpression\`, supply a dimension or metric--- on which to filter, followed by the filter expression. For example, the--- following expression selects \`ga:browser\` dimension which starts with--- Firefox; \`ga:browser=~^Firefox\`. For more information on dimensions--- and metric filters, see [Filters--- reference](https:\/\/developers.google.com\/analytics\/devguides\/reporting\/core\/v3\/reference#filters).-rFiltersExpression :: Lens' ReportRequest (Maybe Text)-rFiltersExpression-  = lens _rFiltersExpression-      (\ s a -> s{_rFiltersExpression = a})--instance FromJSON ReportRequest where-        parseJSON-          = withObject "ReportRequest"-              (\ o ->-                 ReportRequest' <$>-                   (o .:? "metrics" .!= mempty) <*>-                     (o .:? "pivots" .!= mempty)-                     <*> (o .:? "cohortGroup")-                     <*> (o .:? "samplingLevel")-                     <*> (o .:? "includeEmptyRows")-                     <*> (o .:? "dateRanges" .!= mempty)-                     <*> (o .:? "viewId")-                     <*> (o .:? "hideTotals")-                     <*> (o .:? "hideValueRanges")-                     <*> (o .:? "metricFilterClauses" .!= mempty)-                     <*> (o .:? "segments" .!= mempty)-                     <*> (o .:? "pageToken")-                     <*> (o .:? "dimensions" .!= mempty)-                     <*> (o .:? "dimensionFilterClauses" .!= mempty)-                     <*> (o .:? "pageSize")-                     <*> (o .:? "orderBys" .!= mempty)-                     <*> (o .:? "filtersExpression"))--instance ToJSON ReportRequest where-        toJSON ReportRequest'{..}-          = object-              (catMaybes-                 [("metrics" .=) <$> _rMetrics,-                  ("pivots" .=) <$> _rPivots,-                  ("cohortGroup" .=) <$> _rCohortGroup,-                  ("samplingLevel" .=) <$> _rSamplingLevel,-                  ("includeEmptyRows" .=) <$> _rIncludeEmptyRows,-                  ("dateRanges" .=) <$> _rDateRanges,-                  ("viewId" .=) <$> _rViewId,-                  ("hideTotals" .=) <$> _rHideTotals,-                  ("hideValueRanges" .=) <$> _rHideValueRanges,-                  ("metricFilterClauses" .=) <$> _rMetricFilterClauses,-                  ("segments" .=) <$> _rSegments,-                  ("pageToken" .=) <$> _rPageToken,-                  ("dimensions" .=) <$> _rDimensions,-                  ("dimensionFilterClauses" .=) <$>-                    _rDimensionFilterClauses,-                  ("pageSize" .=) <$> _rPageSize,-                  ("orderBys" .=) <$> _rOrderBys,-                  ("filtersExpression" .=) <$> _rFiltersExpression])---- | Header for the metrics.------ /See:/ 'metricHeaderEntry' smart constructor.-data MetricHeaderEntry = MetricHeaderEntry'-    { _mheName :: !(Maybe Text)-    , _mheType :: !(Maybe MetricHeaderEntryType)-    } deriving (Eq,Show,Data,Typeable,Generic)---- | Creates a value of 'MetricHeaderEntry' with the minimum fields required to make a request.------ Use one of the following lenses to modify other fields as desired:------ * 'mheName'------ * 'mheType'-metricHeaderEntry-    :: MetricHeaderEntry-metricHeaderEntry =-    MetricHeaderEntry'-    { _mheName = Nothing-    , _mheType = Nothing-    }---- | The name of the header.-mheName :: Lens' MetricHeaderEntry (Maybe Text)-mheName = lens _mheName (\ s a -> s{_mheName = a})---- | The type of the metric, for example \`INTEGER\`.-mheType :: Lens' MetricHeaderEntry (Maybe MetricHeaderEntryType)-mheType = lens _mheType (\ s a -> s{_mheType = a})--instance FromJSON MetricHeaderEntry where-        parseJSON-          = withObject "MetricHeaderEntry"-              (\ o ->-                 MetricHeaderEntry' <$>-                   (o .:? "name") <*> (o .:? "type"))--instance ToJSON MetricHeaderEntry where-        toJSON MetricHeaderEntry'{..}-          = object-              (catMaybes-                 [("name" .=) <$> _mheName, ("type" .=) <$> _mheType])---- | Defines a cohort group. For example: \"cohortGroup\": { \"cohorts\": [{--- \"name\": \"cohort 1\", \"type\": \"FIRST_VISIT_DATE\", \"dateRange\": {--- \"startDate\": \"2015-08-01\", \"endDate\": \"2015-08-01\" } },{--- \"name\": \"cohort 2\" \"type\": \"FIRST_VISIT_DATE\" \"dateRange\": {--- \"startDate\": \"2015-07-01\", \"endDate\": \"2015-07-01\" } }] }------ /See:/ 'cohortGroup' smart constructor.-data CohortGroup = CohortGroup'-    { _cgCohorts       :: !(Maybe [Cohort])-    , _cgLifetimeValue :: !(Maybe Bool)-    } deriving (Eq,Show,Data,Typeable,Generic)---- | Creates a value of 'CohortGroup' with the minimum fields required to make a request.------ Use one of the following lenses to modify other fields as desired:------ * 'cgCohorts'------ * 'cgLifetimeValue'-cohortGroup-    :: CohortGroup-cohortGroup =-    CohortGroup'-    { _cgCohorts = Nothing-    , _cgLifetimeValue = Nothing-    }---- | The definition for the cohort.-cgCohorts :: Lens' CohortGroup [Cohort]-cgCohorts-  = lens _cgCohorts (\ s a -> s{_cgCohorts = a}) .-      _Default-      . _Coerce---- | Enable Life Time Value (LTV). LTV measures lifetime value for users--- acquired through different channels. Please see: [Cohort--- Analysis](https:\/\/support.google.com\/analytics\/answer\/6074676) and--- [Lifetime--- Value](https:\/\/support.google.com\/analytics\/answer\/6182550) If the--- value of lifetimeValue is false: - The metric values are similar to the--- values in the web interface cohort report. - The cohort definition date--- ranges must be aligned to the calendar week and month. i.e. while--- requesting \`ga:cohortNthWeek\` the \`startDate\` in the cohort--- definition should be a Sunday and the \`endDate\` should be the--- following Saturday, and for \`ga:cohortNthMonth\`, the \`startDate\`--- should be the 1st of the month and \`endDate\` should be the last day of--- the month. When the lifetimeValue is true: - The metric values will--- correspond to the values in the web interface LifeTime value report. ---- The Lifetime Value report shows you how user value (Revenue) and--- engagement (Appviews, Goal Completions, Sessions, and Session Duration)--- grow during the 90 days after a user is acquired. - The metrics are--- calculated as a cumulative average per user per the time increment. ---- The cohort definition date ranges need not be aligned to the calendar--- week and month boundaries. - The \`viewId\` must be an [app view--- ID](https:\/\/support.google.com\/analytics\/answer\/2649553#WebVersusAppViews)-cgLifetimeValue :: Lens' CohortGroup (Maybe Bool)-cgLifetimeValue-  = lens _cgLifetimeValue-      (\ s a -> s{_cgLifetimeValue = a})--instance FromJSON CohortGroup where-        parseJSON-          = withObject "CohortGroup"-              (\ o ->-                 CohortGroup' <$>-                   (o .:? "cohorts" .!= mempty) <*>-                     (o .:? "lifetimeValue"))--instance ToJSON CohortGroup where-        toJSON CohortGroup'{..}-          = object-              (catMaybes-                 [("cohorts" .=) <$> _cgCohorts,-                  ("lifetimeValue" .=) <$> _cgLifetimeValue])---- | A Simple segment conditions consist of one or more dimension\/metric--- conditions that can be combined.------ /See:/ 'simpleSegment' smart constructor.-newtype SimpleSegment = SimpleSegment'-    { _ssOrFiltersForSegment :: Maybe [OrFiltersForSegment]-    } deriving (Eq,Show,Data,Typeable,Generic)---- | Creates a value of 'SimpleSegment' with the minimum fields required to make a request.------ Use one of the following lenses to modify other fields as desired:------ * 'ssOrFiltersForSegment'-simpleSegment-    :: SimpleSegment-simpleSegment =-    SimpleSegment'-    { _ssOrFiltersForSegment = Nothing-    }---- | A list of segment filters groups which are combined with logical \`AND\`--- operator.-ssOrFiltersForSegment :: Lens' SimpleSegment [OrFiltersForSegment]-ssOrFiltersForSegment-  = lens _ssOrFiltersForSegment-      (\ s a -> s{_ssOrFiltersForSegment = a})-      . _Default-      . _Coerce--instance FromJSON SimpleSegment where-        parseJSON-          = withObject "SimpleSegment"-              (\ o ->-                 SimpleSegment' <$>-                   (o .:? "orFiltersForSegment" .!= mempty))--instance ToJSON SimpleSegment where-        toJSON SimpleSegment'{..}-          = object-              (catMaybes-                 [("orFiltersForSegment" .=) <$>-                    _ssOrFiltersForSegment])---- | A group of dimension filters. Set the operator value to specify how the--- filters are logically combined.------ /See:/ 'dimensionFilterClause' smart constructor.-data DimensionFilterClause = DimensionFilterClause'-    { _dfcOperator :: !(Maybe DimensionFilterClauseOperator)-    , _dfcFilters  :: !(Maybe [DimensionFilter])-    } deriving (Eq,Show,Data,Typeable,Generic)---- | Creates a value of 'DimensionFilterClause' with the minimum fields required to make a request.------ Use one of the following lenses to modify other fields as desired:------ * 'dfcOperator'------ * 'dfcFilters'-dimensionFilterClause-    :: DimensionFilterClause-dimensionFilterClause =-    DimensionFilterClause'-    { _dfcOperator = Nothing-    , _dfcFilters = Nothing-    }---- | The operator for combining multiple dimension filters. If unspecified,--- it is treated as an \`OR\`.-dfcOperator :: Lens' DimensionFilterClause (Maybe DimensionFilterClauseOperator)-dfcOperator-  = lens _dfcOperator (\ s a -> s{_dfcOperator = a})---- | The repeated set of filters. They are logically combined based on the--- operator specified.-dfcFilters :: Lens' DimensionFilterClause [DimensionFilter]-dfcFilters-  = lens _dfcFilters (\ s a -> s{_dfcFilters = a}) .-      _Default-      . _Coerce--instance FromJSON DimensionFilterClause where-        parseJSON-          = withObject "DimensionFilterClause"-              (\ o ->-                 DimensionFilterClause' <$>-                   (o .:? "operator") <*> (o .:? "filters" .!= mempty))--instance ToJSON DimensionFilterClause where-        toJSON DimensionFilterClause'{..}-          = object-              (catMaybes-                 [("operator" .=) <$> _dfcOperator,-                  ("filters" .=) <$> _dfcFilters])---- | Specifies the sorting options.------ /See:/ 'orderBy' smart constructor.-data OrderBy = OrderBy'-    { _obOrderType :: !(Maybe OrderByOrderType)-    , _obSortOrder :: !(Maybe OrderBySortOrder)-    , _obFieldName :: !(Maybe Text)-    } deriving (Eq,Show,Data,Typeable,Generic)---- | Creates a value of 'OrderBy' with the minimum fields required to make a request.------ Use one of the following lenses to modify other fields as desired:------ * 'obOrderType'------ * 'obSortOrder'------ * 'obFieldName'-orderBy-    :: OrderBy-orderBy =-    OrderBy'-    { _obOrderType = Nothing-    , _obSortOrder = Nothing-    , _obFieldName = Nothing-    }---- | The order type. The default orderType is \`VALUE\`.-obOrderType :: Lens' OrderBy (Maybe OrderByOrderType)-obOrderType-  = lens _obOrderType (\ s a -> s{_obOrderType = a})---- | The sorting order for the field.-obSortOrder :: Lens' OrderBy (Maybe OrderBySortOrder)-obSortOrder-  = lens _obSortOrder (\ s a -> s{_obSortOrder = a})---- | The field which to sort by. The default sort order is ascending.--- Example: \`ga:browser\`. Note, that you can only specify one field for--- sort here. For example, \`ga:browser, ga:city\` is not valid.-obFieldName :: Lens' OrderBy (Maybe Text)-obFieldName-  = lens _obFieldName (\ s a -> s{_obFieldName = a})--instance FromJSON OrderBy where-        parseJSON-          = withObject "OrderBy"-              (\ o ->-                 OrderBy' <$>-                   (o .:? "orderType") <*> (o .:? "sortOrder") <*>-                     (o .:? "fieldName"))--instance ToJSON OrderBy where-        toJSON OrderBy'{..}-          = object-              (catMaybes-                 [("orderType" .=) <$> _obOrderType,-                  ("sortOrder" .=) <$> _obSortOrder,-                  ("fieldName" .=) <$> _obFieldName])---- | [Dimensions](https:\/\/support.google.com\/analytics\/answer\/1033861)--- are attributes of your data. For example, the dimension \`ga:city\`--- indicates the city, for example, \"Paris\" or \"New York\", from which a--- session originates.------ /See:/ 'dimension' smart constructor.-data Dimension = Dimension'-    { _dName             :: !(Maybe Text)-    , _dHistogramBuckets :: !(Maybe [Textual Int64])-    } deriving (Eq,Show,Data,Typeable,Generic)---- | Creates a value of 'Dimension' with the minimum fields required to make a request.------ Use one of the following lenses to modify other fields as desired:------ * 'dName'------ * 'dHistogramBuckets'-dimension-    :: Dimension-dimension =-    Dimension'-    { _dName = Nothing-    , _dHistogramBuckets = Nothing-    }---- | Name of the dimension to fetch, for example \`ga:browser\`.-dName :: Lens' Dimension (Maybe Text)-dName = lens _dName (\ s a -> s{_dName = a})---- | If non-empty, we place dimension values into buckets after string to--- int64. Dimension values that are not the string representation of an--- integral value will be converted to zero. The bucket values have to be--- in increasing order. Each bucket is closed on the lower end, and open on--- the upper end. The \"first\" bucket includes all values less than the--- first boundary, the \"last\" bucket includes all values up to infinity.--- Dimension values that fall in a bucket get transformed to a new--- dimension value. For example, if one gives a list of \"0, 1, 3, 4, 7\",--- then we return the following buckets: - bucket #1: values \< 0,--- dimension value \"\<0\" - bucket #2: values in [0,1), dimension value--- \"0\" - bucket #3: values in [1,3), dimension value \"1-2\" - bucket #4:--- values in [3,4), dimension value \"3\" - bucket #5: values in [4,7),--- dimension value \"4-6\" - bucket #6: values >= 7, dimension value \"7+\"--- NOTE: If you are applying histogram mutation on any dimension, and using--- that dimension in sort, you will want to use the sort type--- \`HISTOGRAM_BUCKET\` for that purpose. Without that the dimension values--- will be sorted according to dictionary (lexicographic) order. For--- example the ascending dictionary order is: \"\<50\", \"1001+\",--- \"121-1000\", \"50-120\" And the ascending \`HISTOGRAM_BUCKET\` order--- is: \"\<50\", \"50-120\", \"121-1000\", \"1001+\" The client has to--- explicitly request \`\"orderType\": \"HISTOGRAM_BUCKET\"\` for a--- histogram-mutated dimension.-dHistogramBuckets :: Lens' Dimension [Int64]-dHistogramBuckets-  = lens _dHistogramBuckets-      (\ s a -> s{_dHistogramBuckets = a})-      . _Default-      . _Coerce--instance FromJSON Dimension where-        parseJSON-          = withObject "Dimension"-              (\ o ->-                 Dimension' <$>-                   (o .:? "name") <*>-                     (o .:? "histogramBuckets" .!= mempty))--instance ToJSON Dimension where-        toJSON Dimension'{..}-          = object-              (catMaybes-                 [("name" .=) <$> _dName,-                  ("histogramBuckets" .=) <$> _dHistogramBuckets])---- | Used to return a list of metrics for a single DateRange \/ dimension--- combination------ /See:/ 'dateRangeValues' smart constructor.-data DateRangeValues = DateRangeValues'-    { _drvPivotValueRegions :: !(Maybe [PivotValueRegion])-    , _drvValues            :: !(Maybe [Text])-    } deriving (Eq,Show,Data,Typeable,Generic)---- | Creates a value of 'DateRangeValues' with the minimum fields required to make a request.------ Use one of the following lenses to modify other fields as desired:------ * 'drvPivotValueRegions'------ * 'drvValues'-dateRangeValues-    :: DateRangeValues-dateRangeValues =-    DateRangeValues'-    { _drvPivotValueRegions = Nothing-    , _drvValues = Nothing-    }---- | The values of each pivot region.-drvPivotValueRegions :: Lens' DateRangeValues [PivotValueRegion]-drvPivotValueRegions-  = lens _drvPivotValueRegions-      (\ s a -> s{_drvPivotValueRegions = a})-      . _Default-      . _Coerce---- | Each value corresponds to each Metric in the request.-drvValues :: Lens' DateRangeValues [Text]-drvValues-  = lens _drvValues (\ s a -> s{_drvValues = a}) .-      _Default-      . _Coerce--instance FromJSON DateRangeValues where-        parseJSON-          = withObject "DateRangeValues"-              (\ o ->-                 DateRangeValues' <$>-                   (o .:? "pivotValueRegions" .!= mempty) <*>-                     (o .:? "values" .!= mempty))--instance ToJSON DateRangeValues where-        toJSON DateRangeValues'{..}-          = object-              (catMaybes-                 [("pivotValueRegions" .=) <$> _drvPivotValueRegions,-                  ("values" .=) <$> _drvValues])---- | The headers for each of the pivot sections defined in the request.------ /See:/ 'pivotHeader' smart constructor.-data PivotHeader = PivotHeader'-    { _phTotalPivotGroupsCount :: !(Maybe (Textual Int32))-    , _phPivotHeaderEntries    :: !(Maybe [PivotHeaderEntry])-    } deriving (Eq,Show,Data,Typeable,Generic)---- | Creates a value of 'PivotHeader' with the minimum fields required to make a request.------ Use one of the following lenses to modify other fields as desired:------ * 'phTotalPivotGroupsCount'------ * 'phPivotHeaderEntries'-pivotHeader-    :: PivotHeader-pivotHeader =-    PivotHeader'-    { _phTotalPivotGroupsCount = Nothing-    , _phPivotHeaderEntries = Nothing-    }---- | The total number of groups for this pivot.-phTotalPivotGroupsCount :: Lens' PivotHeader (Maybe Int32)-phTotalPivotGroupsCount-  = lens _phTotalPivotGroupsCount-      (\ s a -> s{_phTotalPivotGroupsCount = a})-      . mapping _Coerce---- | A single pivot section header.-phPivotHeaderEntries :: Lens' PivotHeader [PivotHeaderEntry]-phPivotHeaderEntries-  = lens _phPivotHeaderEntries-      (\ s a -> s{_phPivotHeaderEntries = a})-      . _Default-      . _Coerce--instance FromJSON PivotHeader where-        parseJSON-          = withObject "PivotHeader"-              (\ o ->-                 PivotHeader' <$>-                   (o .:? "totalPivotGroupsCount") <*>-                     (o .:? "pivotHeaderEntries" .!= mempty))--instance ToJSON PivotHeader where-        toJSON PivotHeader'{..}-          = object-              (catMaybes-                 [("totalPivotGroupsCount" .=) <$>-                    _phTotalPivotGroupsCount,-                  ("pivotHeaderEntries" .=) <$> _phPivotHeaderEntries])---- | The headers for the metrics.------ /See:/ 'metricHeader' smart constructor.-data MetricHeader = MetricHeader'-    { _mhPivotHeaders        :: !(Maybe [PivotHeader])-    , _mhMetricHeaderEntries :: !(Maybe [MetricHeaderEntry])-    } deriving (Eq,Show,Data,Typeable,Generic)---- | Creates a value of 'MetricHeader' with the minimum fields required to make a request.------ Use one of the following lenses to modify other fields as desired:------ * 'mhPivotHeaders'------ * 'mhMetricHeaderEntries'-metricHeader-    :: MetricHeader-metricHeader =-    MetricHeader'-    { _mhPivotHeaders = Nothing-    , _mhMetricHeaderEntries = Nothing-    }---- | Headers for the pivots in the response.-mhPivotHeaders :: Lens' MetricHeader [PivotHeader]-mhPivotHeaders-  = lens _mhPivotHeaders-      (\ s a -> s{_mhPivotHeaders = a})-      . _Default-      . _Coerce---- | Headers for the metrics in the response.-mhMetricHeaderEntries :: Lens' MetricHeader [MetricHeaderEntry]-mhMetricHeaderEntries-  = lens _mhMetricHeaderEntries-      (\ s a -> s{_mhMetricHeaderEntries = a})-      . _Default-      . _Coerce--instance FromJSON MetricHeader where-        parseJSON-          = withObject "MetricHeader"-              (\ o ->-                 MetricHeader' <$>-                   (o .:? "pivotHeaders" .!= mempty) <*>-                     (o .:? "metricHeaderEntries" .!= mempty))--instance ToJSON MetricHeader where-        toJSON MetricHeader'{..}-          = object-              (catMaybes-                 [("pivotHeaders" .=) <$> _mhPivotHeaders,-                  ("metricHeaderEntries" .=) <$>-                    _mhMetricHeaderEntries])---- | SegmentFilter defines the segment to be either a simple or a sequence--- segment. A simple segment condition contains dimension and metric--- conditions to select the sessions or users. A sequence segment condition--- can be used to select users or sessions based on sequential conditions.------ /See:/ 'segmentFilter' smart constructor.-data SegmentFilter = SegmentFilter'-    { _sfNot             :: !(Maybe Bool)-    , _sfSimpleSegment   :: !(Maybe SimpleSegment)-    , _sfSequenceSegment :: !(Maybe SequenceSegment)-    } deriving (Eq,Show,Data,Typeable,Generic)---- | Creates a value of 'SegmentFilter' with the minimum fields required to make a request.------ Use one of the following lenses to modify other fields as desired:------ * 'sfNot'------ * 'sfSimpleSegment'------ * 'sfSequenceSegment'-segmentFilter-    :: SegmentFilter-segmentFilter =-    SegmentFilter'-    { _sfNot = Nothing-    , _sfSimpleSegment = Nothing-    , _sfSequenceSegment = Nothing-    }---- | If true, match the complement of simple or sequence segment. For--- example, to match all visits not from \"New York\", we can define the--- segment as follows: \"sessionSegment\": { \"segmentFilters\": [{--- \"simpleSegment\" :{ \"orFiltersForSegment\": [{--- \"segmentFilterClauses\":[{ \"dimensionFilter\": { \"dimensionName\":--- \"ga:city\", \"expressions\": [\"New York\"] } }] }] }, \"not\":--- \"True\" }] },-sfNot :: Lens' SegmentFilter (Maybe Bool)-sfNot = lens _sfNot (\ s a -> s{_sfNot = a})---- | A Simple segment conditions consist of one or more dimension\/metric--- conditions that can be combined-sfSimpleSegment :: Lens' SegmentFilter (Maybe SimpleSegment)-sfSimpleSegment-  = lens _sfSimpleSegment-      (\ s a -> s{_sfSimpleSegment = a})---- | Sequence conditions consist of one or more steps, where each step is--- defined by one or more dimension\/metric conditions. Multiple steps can--- be combined with special sequence operators.-sfSequenceSegment :: Lens' SegmentFilter (Maybe SequenceSegment)-sfSequenceSegment-  = lens _sfSequenceSegment-      (\ s a -> s{_sfSequenceSegment = a})--instance FromJSON SegmentFilter where-        parseJSON-          = withObject "SegmentFilter"-              (\ o ->-                 SegmentFilter' <$>-                   (o .:? "not") <*> (o .:? "simpleSegment") <*>-                     (o .:? "sequenceSegment"))--instance ToJSON SegmentFilter where-        toJSON SegmentFilter'{..}-          = object-              (catMaybes-                 [("not" .=) <$> _sfNot,-                  ("simpleSegment" .=) <$> _sfSimpleSegment,-                  ("sequenceSegment" .=) <$> _sfSequenceSegment])---- | A contiguous set of days: startDate, startDate + 1 day, ..., endDate.--- The start and end dates are specified in--- [ISO8601](https:\/\/en.wikipedia.org\/wiki\/ISO_8601) date format--- \`YYYY-MM-DD\`.------ /See:/ 'dateRange' smart constructor.-data DateRange = DateRange'-    { _drEndDate   :: !(Maybe Text)-    , _drStartDate :: !(Maybe Text)-    } deriving (Eq,Show,Data,Typeable,Generic)---- | Creates a value of 'DateRange' with the minimum fields required to make a request.------ Use one of the following lenses to modify other fields as desired:------ * 'drEndDate'------ * 'drStartDate'-dateRange-    :: DateRange-dateRange =-    DateRange'-    { _drEndDate = Nothing-    , _drStartDate = Nothing-    }---- | The end date for the query in the format \`YYYY-MM-DD\`.-drEndDate :: Lens' DateRange (Maybe Text)-drEndDate-  = lens _drEndDate (\ s a -> s{_drEndDate = a})---- | The start date for the query in the format \`YYYY-MM-DD\`.-drStartDate :: Lens' DateRange (Maybe Text)-drStartDate-  = lens _drStartDate (\ s a -> s{_drStartDate = a})--instance FromJSON DateRange where-        parseJSON-          = withObject "DateRange"-              (\ o ->-                 DateRange' <$>-                   (o .:? "endDate") <*> (o .:? "startDate"))--instance ToJSON DateRange where-        toJSON DateRange'{..}-          = object-              (catMaybes-                 [("endDate" .=) <$> _drEndDate,-                  ("startDate" .=) <$> _drStartDate])---- | The data response corresponding to the request.------ /See:/ 'report' smart constructor.-data Report = Report'-    { _rNextPageToken :: !(Maybe Text)-    , _rData          :: !(Maybe ReportData)-    , _rColumnHeader  :: !(Maybe ColumnHeader)-    } deriving (Eq,Show,Data,Typeable,Generic)---- | Creates a value of 'Report' with the minimum fields required to make a request.------ Use one of the following lenses to modify other fields as desired:------ * 'rNextPageToken'------ * 'rData'------ * 'rColumnHeader'-report-    :: Report-report =-    Report'-    { _rNextPageToken = Nothing-    , _rData = Nothing-    , _rColumnHeader = Nothing-    }---- | Page token to retrieve the next page of results in the list.-rNextPageToken :: Lens' Report (Maybe Text)-rNextPageToken-  = lens _rNextPageToken-      (\ s a -> s{_rNextPageToken = a})---- | Response data.-rData :: Lens' Report (Maybe ReportData)-rData = lens _rData (\ s a -> s{_rData = a})---- | The column headers.-rColumnHeader :: Lens' Report (Maybe ColumnHeader)-rColumnHeader-  = lens _rColumnHeader-      (\ s a -> s{_rColumnHeader = a})--instance FromJSON Report where-        parseJSON-          = withObject "Report"-              (\ o ->-                 Report' <$>-                   (o .:? "nextPageToken") <*> (o .:? "data") <*>-                     (o .:? "columnHeader"))--instance ToJSON Report where-        toJSON Report'{..}-          = object-              (catMaybes-                 [("nextPageToken" .=) <$> _rNextPageToken,-                  ("data" .=) <$> _rData,-                  ("columnHeader" .=) <$> _rColumnHeader])---- | The data part of the report.------ /See:/ 'reportData' smart constructor.-data ReportData = ReportData'-    { _rdMinimums           :: !(Maybe [DateRangeValues])-    , _rdRows               :: !(Maybe [ReportRow])-    , _rdTotals             :: !(Maybe [DateRangeValues])-    , _rdSamplesReadCounts  :: !(Maybe [Textual Int64])-    , _rdMaximums           :: !(Maybe [DateRangeValues])-    , _rdDataLastRefreshed  :: !(Maybe DateTime')-    , _rdRowCount           :: !(Maybe (Textual Int32))-    , _rdSamplingSpaceSizes :: !(Maybe [Textual Int64])-    , _rdIsDataGolden       :: !(Maybe Bool)-    } deriving (Eq,Show,Data,Typeable,Generic)---- | Creates a value of 'ReportData' with the minimum fields required to make a request.------ Use one of the following lenses to modify other fields as desired:------ * 'rdMinimums'------ * 'rdRows'------ * 'rdTotals'------ * 'rdSamplesReadCounts'------ * 'rdMaximums'------ * 'rdDataLastRefreshed'------ * 'rdRowCount'------ * 'rdSamplingSpaceSizes'------ * 'rdIsDataGolden'-reportData-    :: ReportData-reportData =-    ReportData'-    { _rdMinimums = Nothing-    , _rdRows = Nothing-    , _rdTotals = Nothing-    , _rdSamplesReadCounts = Nothing-    , _rdMaximums = Nothing-    , _rdDataLastRefreshed = Nothing-    , _rdRowCount = Nothing-    , _rdSamplingSpaceSizes = Nothing-    , _rdIsDataGolden = Nothing-    }---- | Minimum and maximum values seen over all matching rows. These are both--- empty when \`hideValueRanges\` in the request is false, or when rowCount--- is zero.-rdMinimums :: Lens' ReportData [DateRangeValues]-rdMinimums-  = lens _rdMinimums (\ s a -> s{_rdMinimums = a}) .-      _Default-      . _Coerce---- | There\'s one ReportRow for every unique combination of dimensions.-rdRows :: Lens' ReportData [ReportRow]-rdRows-  = lens _rdRows (\ s a -> s{_rdRows = a}) . _Default .-      _Coerce---- | For each requested date range, for the set of all rows that match the--- query, every requested value format gets a total. The total for a value--- format is computed by first totaling the metrics mentioned in the value--- format and then evaluating the value format as a scalar expression.--- E.g., The \"totals\" for \`3 \/ (ga:sessions + 2)\` we compute \`3 \/--- ((sum of all relevant ga:sessions) + 2)\`. Totals are computed before--- pagination.-rdTotals :: Lens' ReportData [DateRangeValues]-rdTotals-  = lens _rdTotals (\ s a -> s{_rdTotals = a}) .-      _Default-      . _Coerce---- | If the results are--- [sampled](https:\/\/support.google.com\/analytics\/answer\/2637192),--- this returns the total number of samples read, one entry per date range.--- If the results are not sampled this field will not be defined. See--- [developer--- guide](\/analytics\/devguides\/reporting\/core\/v4\/basics#sampling) for--- details.-rdSamplesReadCounts :: Lens' ReportData [Int64]-rdSamplesReadCounts-  = lens _rdSamplesReadCounts-      (\ s a -> s{_rdSamplesReadCounts = a})-      . _Default-      . _Coerce---- | Minimum and maximum values seen over all matching rows. These are both--- empty when \`hideValueRanges\` in the request is false, or when rowCount--- is zero.-rdMaximums :: Lens' ReportData [DateRangeValues]-rdMaximums-  = lens _rdMaximums (\ s a -> s{_rdMaximums = a}) .-      _Default-      . _Coerce---- | The last time the data in the report was refreshed. All the hits--- received before this timestamp are included in the calculation of the--- report.-rdDataLastRefreshed :: Lens' ReportData (Maybe UTCTime)-rdDataLastRefreshed-  = lens _rdDataLastRefreshed-      (\ s a -> s{_rdDataLastRefreshed = a})-      . mapping _DateTime---- | Total number of matching rows for this query.-rdRowCount :: Lens' ReportData (Maybe Int32)-rdRowCount-  = lens _rdRowCount (\ s a -> s{_rdRowCount = a}) .-      mapping _Coerce---- | If the results are--- [sampled](https:\/\/support.google.com\/analytics\/answer\/2637192),--- this returns the total number of samples present, one entry per date--- range. If the results are not sampled this field will not be defined.--- See [developer--- guide](\/analytics\/devguides\/reporting\/core\/v4\/basics#sampling) for--- details.-rdSamplingSpaceSizes :: Lens' ReportData [Int64]-rdSamplingSpaceSizes-  = lens _rdSamplingSpaceSizes-      (\ s a -> s{_rdSamplingSpaceSizes = a})-      . _Default-      . _Coerce---- | Indicates if response to this request is golden or not. Data is golden--- when the exact same request will not produce any new results if asked at--- a later point in time.-rdIsDataGolden :: Lens' ReportData (Maybe Bool)-rdIsDataGolden-  = lens _rdIsDataGolden-      (\ s a -> s{_rdIsDataGolden = a})--instance FromJSON ReportData where-        parseJSON-          = withObject "ReportData"-              (\ o ->-                 ReportData' <$>-                   (o .:? "minimums" .!= mempty) <*>-                     (o .:? "rows" .!= mempty)-                     <*> (o .:? "totals" .!= mempty)-                     <*> (o .:? "samplesReadCounts" .!= mempty)-                     <*> (o .:? "maximums" .!= mempty)-                     <*> (o .:? "dataLastRefreshed")-                     <*> (o .:? "rowCount")-                     <*> (o .:? "samplingSpaceSizes" .!= mempty)-                     <*> (o .:? "isDataGolden"))--instance ToJSON ReportData where-        toJSON ReportData'{..}-          = object-              (catMaybes-                 [("minimums" .=) <$> _rdMinimums,-                  ("rows" .=) <$> _rdRows, ("totals" .=) <$> _rdTotals,-                  ("samplesReadCounts" .=) <$> _rdSamplesReadCounts,-                  ("maximums" .=) <$> _rdMaximums,-                  ("dataLastRefreshed" .=) <$> _rdDataLastRefreshed,-                  ("rowCount" .=) <$> _rdRowCount,-                  ("samplingSpaceSizes" .=) <$> _rdSamplingSpaceSizes,-                  ("isDataGolden" .=) <$> _rdIsDataGolden])---- | Filter Clause to be used in a segment definition, can be wither a metric--- or a dimension filter.------ /See:/ 'segmentFilterClause' smart constructor.-data SegmentFilterClause = SegmentFilterClause'-    { _sfcMetricFilter    :: !(Maybe SegmentMetricFilter)-    , _sfcNot             :: !(Maybe Bool)-    , _sfcDimensionFilter :: !(Maybe SegmentDimensionFilter)-    } deriving (Eq,Show,Data,Typeable,Generic)---- | Creates a value of 'SegmentFilterClause' with the minimum fields required to make a request.------ Use one of the following lenses to modify other fields as desired:------ * 'sfcMetricFilter'------ * 'sfcNot'------ * 'sfcDimensionFilter'-segmentFilterClause-    :: SegmentFilterClause-segmentFilterClause =-    SegmentFilterClause'-    { _sfcMetricFilter = Nothing-    , _sfcNot = Nothing-    , _sfcDimensionFilter = Nothing-    }---- | Metric Filter for the segment definition.-sfcMetricFilter :: Lens' SegmentFilterClause (Maybe SegmentMetricFilter)-sfcMetricFilter-  = lens _sfcMetricFilter-      (\ s a -> s{_sfcMetricFilter = a})---- | Matches the complement (\`!\`) of the filter.-sfcNot :: Lens' SegmentFilterClause (Maybe Bool)-sfcNot = lens _sfcNot (\ s a -> s{_sfcNot = a})---- | Dimension Filter for the segment definition.-sfcDimensionFilter :: Lens' SegmentFilterClause (Maybe SegmentDimensionFilter)-sfcDimensionFilter-  = lens _sfcDimensionFilter-      (\ s a -> s{_sfcDimensionFilter = a})--instance FromJSON SegmentFilterClause where-        parseJSON-          = withObject "SegmentFilterClause"-              (\ o ->-                 SegmentFilterClause' <$>-                   (o .:? "metricFilter") <*> (o .:? "not") <*>-                     (o .:? "dimensionFilter"))--instance ToJSON SegmentFilterClause where-        toJSON SegmentFilterClause'{..}-          = object-              (catMaybes-                 [("metricFilter" .=) <$> _sfcMetricFilter,-                  ("not" .=) <$> _sfcNot,-                  ("dimensionFilter" .=) <$> _sfcDimensionFilter])---- | A segment sequence definition.------ /See:/ 'segmentSequenceStep' smart constructor.-data SegmentSequenceStep = SegmentSequenceStep'-    { _sssMatchType           :: !(Maybe SegmentSequenceStepMatchType)-    , _sssOrFiltersForSegment :: !(Maybe [OrFiltersForSegment])-    } deriving (Eq,Show,Data,Typeable,Generic)---- | Creates a value of 'SegmentSequenceStep' with the minimum fields required to make a request.------ Use one of the following lenses to modify other fields as desired:------ * 'sssMatchType'------ * 'sssOrFiltersForSegment'-segmentSequenceStep-    :: SegmentSequenceStep-segmentSequenceStep =-    SegmentSequenceStep'-    { _sssMatchType = Nothing-    , _sssOrFiltersForSegment = Nothing-    }---- | Specifies if the step immediately precedes or can be any time before the--- next step.-sssMatchType :: Lens' SegmentSequenceStep (Maybe SegmentSequenceStepMatchType)-sssMatchType-  = lens _sssMatchType (\ s a -> s{_sssMatchType = a})---- | A sequence is specified with a list of Or grouped filters which are--- combined with \`AND\` operator.-sssOrFiltersForSegment :: Lens' SegmentSequenceStep [OrFiltersForSegment]-sssOrFiltersForSegment-  = lens _sssOrFiltersForSegment-      (\ s a -> s{_sssOrFiltersForSegment = a})-      . _Default-      . _Coerce--instance FromJSON SegmentSequenceStep where-        parseJSON-          = withObject "SegmentSequenceStep"-              (\ o ->-                 SegmentSequenceStep' <$>-                   (o .:? "matchType") <*>-                     (o .:? "orFiltersForSegment" .!= mempty))--instance ToJSON SegmentSequenceStep where-        toJSON SegmentSequenceStep'{..}-          = object-              (catMaybes-                 [("matchType" .=) <$> _sssMatchType,-                  ("orFiltersForSegment" .=) <$>-                    _sssOrFiltersForSegment])---- | A list of segment filters in the \`OR\` group are combined with the--- logical OR operator.------ /See:/ 'orFiltersForSegment' smart constructor.-newtype OrFiltersForSegment = OrFiltersForSegment'-    { _offsSegmentFilterClauses :: Maybe [SegmentFilterClause]-    } deriving (Eq,Show,Data,Typeable,Generic)---- | Creates a value of 'OrFiltersForSegment' with the minimum fields required to make a request.------ Use one of the following lenses to modify other fields as desired:------ * 'offsSegmentFilterClauses'-orFiltersForSegment-    :: OrFiltersForSegment-orFiltersForSegment =-    OrFiltersForSegment'-    { _offsSegmentFilterClauses = Nothing-    }---- | List of segment filters to be combined with a \`OR\` operator.-offsSegmentFilterClauses :: Lens' OrFiltersForSegment [SegmentFilterClause]-offsSegmentFilterClauses-  = lens _offsSegmentFilterClauses-      (\ s a -> s{_offsSegmentFilterClauses = a})-      . _Default-      . _Coerce--instance FromJSON OrFiltersForSegment where-        parseJSON-          = withObject "OrFiltersForSegment"-              (\ o ->-                 OrFiltersForSegment' <$>-                   (o .:? "segmentFilterClauses" .!= mempty))--instance ToJSON OrFiltersForSegment where-        toJSON OrFiltersForSegment'{..}-          = object-              (catMaybes-                 [("segmentFilterClauses" .=) <$>-                    _offsSegmentFilterClauses])---- | SegmentDefinition defines the segment to be a set of SegmentFilters--- which are combined together with a logical \`AND\` operation.------ /See:/ 'segmentDefinition' smart constructor.-newtype SegmentDefinition = SegmentDefinition'-    { _sdSegmentFilters :: Maybe [SegmentFilter]-    } deriving (Eq,Show,Data,Typeable,Generic)---- | Creates a value of 'SegmentDefinition' with the minimum fields required to make a request.------ Use one of the following lenses to modify other fields as desired:------ * 'sdSegmentFilters'-segmentDefinition-    :: SegmentDefinition-segmentDefinition =-    SegmentDefinition'-    { _sdSegmentFilters = Nothing-    }---- | A segment is defined by a set of segment filters which are combined--- together with a logical \`AND\` operation.-sdSegmentFilters :: Lens' SegmentDefinition [SegmentFilter]-sdSegmentFilters-  = lens _sdSegmentFilters-      (\ s a -> s{_sdSegmentFilters = a})-      . _Default-      . _Coerce--instance FromJSON SegmentDefinition where-        parseJSON-          = withObject "SegmentDefinition"-              (\ o ->-                 SegmentDefinition' <$>-                   (o .:? "segmentFilters" .!= mempty))--instance ToJSON SegmentDefinition where-        toJSON SegmentDefinition'{..}-          = object-              (catMaybes-                 [("segmentFilters" .=) <$> _sdSegmentFilters])---- | The Pivot describes the pivot section in the request. The Pivot helps--- rearrange the information in the table for certain reports by pivoting--- your data on a second dimension.------ /See:/ 'pivot' smart constructor.-data Pivot = Pivot'-    { _pStartGroup             :: !(Maybe (Textual Int32))-    , _pMetrics                :: !(Maybe [Metric])-    , _pMaxGroupCount          :: !(Maybe (Textual Int32))-    , _pDimensions             :: !(Maybe [Dimension])-    , _pDimensionFilterClauses :: !(Maybe [DimensionFilterClause])-    } deriving (Eq,Show,Data,Typeable,Generic)---- | Creates a value of 'Pivot' with the minimum fields required to make a request.------ Use one of the following lenses to modify other fields as desired:------ * 'pStartGroup'------ * 'pMetrics'------ * 'pMaxGroupCount'------ * 'pDimensions'------ * 'pDimensionFilterClauses'-pivot-    :: Pivot-pivot =-    Pivot'-    { _pStartGroup = Nothing-    , _pMetrics = Nothing-    , _pMaxGroupCount = Nothing-    , _pDimensions = Nothing-    , _pDimensionFilterClauses = Nothing-    }---- | If k metrics were requested, then the response will contain some--- data-dependent multiple of k columns in the report. E.g., if you pivoted--- on the dimension \`ga:browser\` then you\'d get k columns for--- \"Firefox\", k columns for \"IE\", k columns for \"Chrome\", etc. The--- ordering of the groups of columns is determined by descending order of--- \"total\" for the first of the k values. Ties are broken by--- lexicographic ordering of the first pivot dimension, then lexicographic--- ordering of the second pivot dimension, and so on. E.g., if the totals--- for the first value for Firefox, IE, and Chrome were 8, 2, 8,--- respectively, the order of columns would be Chrome, Firefox, IE. The--- following let you choose which of the groups of k columns are included--- in the response.-pStartGroup :: Lens' Pivot (Maybe Int32)-pStartGroup-  = lens _pStartGroup (\ s a -> s{_pStartGroup = a}) .-      mapping _Coerce---- | The pivot metrics. Pivot metrics are part of the restriction on total--- number of metrics allowed in the request.-pMetrics :: Lens' Pivot [Metric]-pMetrics-  = lens _pMetrics (\ s a -> s{_pMetrics = a}) .-      _Default-      . _Coerce---- | Specifies the maximum number of groups to return. The default value is--- 10, also the maximum value is 1,000.-pMaxGroupCount :: Lens' Pivot (Maybe Int32)-pMaxGroupCount-  = lens _pMaxGroupCount-      (\ s a -> s{_pMaxGroupCount = a})-      . mapping _Coerce---- | A list of dimensions to show as pivot columns. A Pivot can have a--- maximum of 4 dimensions. Pivot dimensions are part of the restriction on--- the total number of dimensions allowed in the request.-pDimensions :: Lens' Pivot [Dimension]-pDimensions-  = lens _pDimensions (\ s a -> s{_pDimensions = a}) .-      _Default-      . _Coerce---- | DimensionFilterClauses are logically combined with an \`AND\` operator:--- only data that is included by all these DimensionFilterClauses--- contributes to the values in this pivot region. Dimension filters can be--- used to restrict the columns shown in the pivot region. For example if--- you have \`ga:browser\` as the requested dimension in the pivot region,--- and you specify key filters to restrict \`ga:browser\` to only \"IE\" or--- \"Firefox\", then only those two browsers would show up as columns.-pDimensionFilterClauses :: Lens' Pivot [DimensionFilterClause]-pDimensionFilterClauses-  = lens _pDimensionFilterClauses-      (\ s a -> s{_pDimensionFilterClauses = a})-      . _Default-      . _Coerce--instance FromJSON Pivot where-        parseJSON-          = withObject "Pivot"-              (\ o ->-                 Pivot' <$>-                   (o .:? "startGroup") <*> (o .:? "metrics" .!= mempty)-                     <*> (o .:? "maxGroupCount")-                     <*> (o .:? "dimensions" .!= mempty)-                     <*> (o .:? "dimensionFilterClauses" .!= mempty))--instance ToJSON Pivot where-        toJSON Pivot'{..}-          = object-              (catMaybes-                 [("startGroup" .=) <$> _pStartGroup,-                  ("metrics" .=) <$> _pMetrics,-                  ("maxGroupCount" .=) <$> _pMaxGroupCount,-                  ("dimensions" .=) <$> _pDimensions,-                  ("dimensionFilterClauses" .=) <$>-                    _pDimensionFilterClauses])---- | Sequence conditions consist of one or more steps, where each step is--- defined by one or more dimension\/metric conditions. Multiple steps can--- be combined with special sequence operators.------ /See:/ 'sequenceSegment' smart constructor.-data SequenceSegment = SequenceSegment'-    { _ssFirstStepShouldMatchFirstHit :: !(Maybe Bool)-    , _ssSegmentSequenceSteps         :: !(Maybe [SegmentSequenceStep])-    } deriving (Eq,Show,Data,Typeable,Generic)---- | Creates a value of 'SequenceSegment' with the minimum fields required to make a request.------ Use one of the following lenses to modify other fields as desired:------ * 'ssFirstStepShouldMatchFirstHit'------ * 'ssSegmentSequenceSteps'-sequenceSegment-    :: SequenceSegment-sequenceSegment =-    SequenceSegment'-    { _ssFirstStepShouldMatchFirstHit = Nothing-    , _ssSegmentSequenceSteps = Nothing-    }---- | If set, first step condition must match the first hit of the visitor (in--- the date range).-ssFirstStepShouldMatchFirstHit :: Lens' SequenceSegment (Maybe Bool)-ssFirstStepShouldMatchFirstHit-  = lens _ssFirstStepShouldMatchFirstHit-      (\ s a -> s{_ssFirstStepShouldMatchFirstHit = a})---- | The list of steps in the sequence.-ssSegmentSequenceSteps :: Lens' SequenceSegment [SegmentSequenceStep]-ssSegmentSequenceSteps-  = lens _ssSegmentSequenceSteps-      (\ s a -> s{_ssSegmentSequenceSteps = a})-      . _Default-      . _Coerce--instance FromJSON SequenceSegment where-        parseJSON-          = withObject "SequenceSegment"-              (\ o ->-                 SequenceSegment' <$>-                   (o .:? "firstStepShouldMatchFirstHit") <*>-                     (o .:? "segmentSequenceSteps" .!= mempty))--instance ToJSON SequenceSegment where-        toJSON SequenceSegment'{..}-          = object-              (catMaybes-                 [("firstStepShouldMatchFirstHit" .=) <$>-                    _ssFirstStepShouldMatchFirstHit,-                  ("segmentSequenceSteps" .=) <$>-                    _ssSegmentSequenceSteps])---- | [Metrics](https:\/\/support.google.com\/analytics\/answer\/1033861) are--- the quantitative measurements. For example, the metric \`ga:users\`--- indicates the total number of users for the requested time period.------ /See:/ 'metric' smart constructor.-data Metric = Metric'-    { _mFormattingType :: !(Maybe MetricFormattingType)-    , _mAlias          :: !(Maybe Text)-    , _mExpression     :: !(Maybe Text)-    } deriving (Eq,Show,Data,Typeable,Generic)---- | Creates a value of 'Metric' with the minimum fields required to make a request.------ Use one of the following lenses to modify other fields as desired:------ * 'mFormattingType'------ * 'mAlias'------ * 'mExpression'-metric-    :: Metric-metric =-    Metric'-    { _mFormattingType = Nothing-    , _mAlias = Nothing-    , _mExpression = Nothing-    }---- | Specifies how the metric expression should be formatted, for example--- \`INTEGER\`.-mFormattingType :: Lens' Metric (Maybe MetricFormattingType)-mFormattingType-  = lens _mFormattingType-      (\ s a -> s{_mFormattingType = a})---- | An alias for the metric expression is an alternate name for the--- expression. The alias can be used for filtering and sorting. This field--- is optional and is useful if the expression is not a single metric but a--- complex expression which cannot be used in filtering and sorting. The--- alias is also used in the response column header.-mAlias :: Lens' Metric (Maybe Text)-mAlias = lens _mAlias (\ s a -> s{_mAlias = a})---- | A metric expression in the request. An expression is constructed from--- one or more metrics and numbers. Accepted operators include: Plus (+),--- Minus (-), Negation (Unary -), Divided by (\/), Multiplied by (*),--- Parenthesis, Positive cardinal numbers (0-9), can include decimals and--- is limited to 1024 characters. Example \`ga:totalRefunds\/ga:users\`, in--- most cases the metric expression is just a single metric name like--- \`ga:users\`. Adding mixed \`MetricType\` (E.g., \`CURRENCY\` +--- \`PERCENTAGE\`) metrics will result in unexpected results.-mExpression :: Lens' Metric (Maybe Text)-mExpression-  = lens _mExpression (\ s a -> s{_mExpression = a})--instance FromJSON Metric where-        parseJSON-          = withObject "Metric"-              (\ o ->-                 Metric' <$>-                   (o .:? "formattingType") <*> (o .:? "alias") <*>-                     (o .:? "expression"))--instance ToJSON Metric where-        toJSON Metric'{..}-          = object-              (catMaybes-                 [("formattingType" .=) <$> _mFormattingType,-                  ("alias" .=) <$> _mAlias,-                  ("expression" .=) <$> _mExpression])---- | Metric filter to be used in a segment filter clause.------ /See:/ 'segmentMetricFilter' smart constructor.-data SegmentMetricFilter = SegmentMetricFilter'-    { _smfOperator           :: !(Maybe SegmentMetricFilterOperator)-    , _smfMetricName         :: !(Maybe Text)-    , _smfMaxComparisonValue :: !(Maybe Text)-    , _smfScope              :: !(Maybe SegmentMetricFilterScope)-    , _smfComparisonValue    :: !(Maybe Text)-    } deriving (Eq,Show,Data,Typeable,Generic)---- | Creates a value of 'SegmentMetricFilter' with the minimum fields required to make a request.------ Use one of the following lenses to modify other fields as desired:------ * 'smfOperator'------ * 'smfMetricName'------ * 'smfMaxComparisonValue'------ * 'smfScope'------ * 'smfComparisonValue'-segmentMetricFilter-    :: SegmentMetricFilter-segmentMetricFilter =-    SegmentMetricFilter'-    { _smfOperator = Nothing-    , _smfMetricName = Nothing-    , _smfMaxComparisonValue = Nothing-    , _smfScope = Nothing-    , _smfComparisonValue = Nothing-    }---- | Specifies is the operation to perform to compare the metric. The default--- is \`EQUAL\`.-smfOperator :: Lens' SegmentMetricFilter (Maybe SegmentMetricFilterOperator)-smfOperator-  = lens _smfOperator (\ s a -> s{_smfOperator = a})---- | The metric that will be filtered on. A \`metricFilter\` must contain a--- metric name.-smfMetricName :: Lens' SegmentMetricFilter (Maybe Text)-smfMetricName-  = lens _smfMetricName-      (\ s a -> s{_smfMetricName = a})---- | Max comparison value is only used for \`BETWEEN\` operator.-smfMaxComparisonValue :: Lens' SegmentMetricFilter (Maybe Text)-smfMaxComparisonValue-  = lens _smfMaxComparisonValue-      (\ s a -> s{_smfMaxComparisonValue = a})---- | Scope for a metric defines the level at which that metric is defined.--- The specified metric scope must be equal to or greater than its primary--- scope as defined in the data model. The primary scope is defined by if--- the segment is selecting users or sessions.-smfScope :: Lens' SegmentMetricFilter (Maybe SegmentMetricFilterScope)-smfScope = lens _smfScope (\ s a -> s{_smfScope = a})---- | The value to compare against. If the operator is \`BETWEEN\`, this value--- is treated as minimum comparison value.-smfComparisonValue :: Lens' SegmentMetricFilter (Maybe Text)-smfComparisonValue-  = lens _smfComparisonValue-      (\ s a -> s{_smfComparisonValue = a})--instance FromJSON SegmentMetricFilter where-        parseJSON-          = withObject "SegmentMetricFilter"-              (\ o ->-                 SegmentMetricFilter' <$>-                   (o .:? "operator") <*> (o .:? "metricName") <*>-                     (o .:? "maxComparisonValue")-                     <*> (o .:? "scope")-                     <*> (o .:? "comparisonValue"))--instance ToJSON SegmentMetricFilter where-        toJSON SegmentMetricFilter'{..}-          = object-              (catMaybes-                 [("operator" .=) <$> _smfOperator,-                  ("metricName" .=) <$> _smfMetricName,-                  ("maxComparisonValue" .=) <$> _smfMaxComparisonValue,-                  ("scope" .=) <$> _smfScope,-                  ("comparisonValue" .=) <$> _smfComparisonValue])---- | The batch request containing multiple report request.------ /See:/ 'getReportsRequest' smart constructor.-data GetReportsRequest = GetReportsRequest'-    { _grrUseResourceQuotas :: !(Maybe Bool)-    , _grrReportRequests    :: !(Maybe [ReportRequest])-    } deriving (Eq,Show,Data,Typeable,Generic)---- | Creates a value of 'GetReportsRequest' with the minimum fields required to make a request.------ Use one of the following lenses to modify other fields as desired:------ * 'grrUseResourceQuotas'------ * 'grrReportRequests'-getReportsRequest-    :: GetReportsRequest-getReportsRequest =-    GetReportsRequest'-    { _grrUseResourceQuotas = Nothing-    , _grrReportRequests = Nothing-    }---- | Enables [resource based--- quotas](\/analytics\/devguides\/reporting\/core\/v4\/limits-quotas#analytics_reporting_api_v4),--- (defaults to \`False\`). If this field is set to \`True\` the per view--- (profile) quotas are governed by the computational cost of the request.--- Note that using cost based quotas will higher enable sampling rates. (10--- Million for \`SMALL\`, 100M for \`LARGE\`. See the [limits and quotas--- documentation](\/analytics\/devguides\/reporting\/core\/v4\/limits-quotas#analytics_reporting_api_v4)--- for details.-grrUseResourceQuotas :: Lens' GetReportsRequest (Maybe Bool)-grrUseResourceQuotas-  = lens _grrUseResourceQuotas-      (\ s a -> s{_grrUseResourceQuotas = a})---- | Requests, each request will have a separate response. There can be a--- maximum of 5 requests. All requests should have the same \`dateRanges\`,--- \`viewId\`, \`segments\`, \`samplingLevel\`, and \`cohortGroup\`.-grrReportRequests :: Lens' GetReportsRequest [ReportRequest]-grrReportRequests-  = lens _grrReportRequests-      (\ s a -> s{_grrReportRequests = a})-      . _Default-      . _Coerce--instance FromJSON GetReportsRequest where-        parseJSON-          = withObject "GetReportsRequest"-              (\ o ->-                 GetReportsRequest' <$>-                   (o .:? "useResourceQuotas") <*>-                     (o .:? "reportRequests" .!= mempty))--instance ToJSON GetReportsRequest where-        toJSON GetReportsRequest'{..}-          = object-              (catMaybes-                 [("useResourceQuotas" .=) <$> _grrUseResourceQuotas,-                  ("reportRequests" .=) <$> _grrReportRequests])---- | Defines a cohort. A cohort is a group of users who share a common--- characteristic. For example, all users with the same acquisition date--- belong to the same cohort.------ /See:/ 'cohort' smart constructor.-data Cohort = Cohort'-    { _cDateRange :: !(Maybe DateRange)-    , _cName      :: !(Maybe Text)-    , _cType      :: !(Maybe CohortType)-    } deriving (Eq,Show,Data,Typeable,Generic)---- | Creates a value of 'Cohort' with the minimum fields required to make a request.------ Use one of the following lenses to modify other fields as desired:------ * 'cDateRange'------ * 'cName'------ * 'cType'-cohort-    :: Cohort-cohort =-    Cohort'-    { _cDateRange = Nothing-    , _cName = Nothing-    , _cType = Nothing-    }---- | This is used for \`FIRST_VISIT_DATE\` cohort, the cohort selects users--- whose first visit date is between start date and end date defined in the--- DateRange. The date ranges should be aligned for cohort requests. If the--- request contains \`ga:cohortNthDay\` it should be exactly one day long,--- if \`ga:cohortNthWeek\` it should be aligned to the week boundary--- (starting at Sunday and ending Saturday), and for \`ga:cohortNthMonth\`--- the date range should be aligned to the month (starting at the first and--- ending on the last day of the month). For LTV requests there are no such--- restrictions. You do not need to supply a date range for the--- \`reportsRequest.dateRanges\` field.-cDateRange :: Lens' Cohort (Maybe DateRange)-cDateRange-  = lens _cDateRange (\ s a -> s{_cDateRange = a})---- | A unique name for the cohort. If not defined name will be auto-generated--- with values cohort_[1234...].-cName :: Lens' Cohort (Maybe Text)-cName = lens _cName (\ s a -> s{_cName = a})---- | Type of the cohort. The only supported type as of now is--- \`FIRST_VISIT_DATE\`. If this field is unspecified the cohort is treated--- as \`FIRST_VISIT_DATE\` type cohort.-cType :: Lens' Cohort (Maybe CohortType)-cType = lens _cType (\ s a -> s{_cType = a})--instance FromJSON Cohort where-        parseJSON-          = withObject "Cohort"-              (\ o ->-                 Cohort' <$>-                   (o .:? "dateRange") <*> (o .:? "name") <*>-                     (o .:? "type"))--instance ToJSON Cohort where-        toJSON Cohort'{..}-          = object-              (catMaybes-                 [("dateRange" .=) <$> _cDateRange,-                  ("name" .=) <$> _cName, ("type" .=) <$> _cType])---- | Dimension filter specifies the filtering options on a dimension.------ /See:/ 'dimensionFilter' smart constructor.-data DimensionFilter = DimensionFilter'-    { _dfNot           :: !(Maybe Bool)-    , _dfOperator      :: !(Maybe DimensionFilterOperator)-    , _dfExpressions   :: !(Maybe [Text])-    , _dfDimensionName :: !(Maybe Text)-    , _dfCaseSensitive :: !(Maybe Bool)-    } deriving (Eq,Show,Data,Typeable,Generic)---- | Creates a value of 'DimensionFilter' with the minimum fields required to make a request.------ Use one of the following lenses to modify other fields as desired:------ * 'dfNot'------ * 'dfOperator'------ * 'dfExpressions'------ * 'dfDimensionName'------ * 'dfCaseSensitive'-dimensionFilter-    :: DimensionFilter-dimensionFilter =-    DimensionFilter'-    { _dfNot = Nothing-    , _dfOperator = Nothing-    , _dfExpressions = Nothing-    , _dfDimensionName = Nothing-    , _dfCaseSensitive = Nothing-    }---- | Logical \`NOT\` operator. If this boolean is set to true, then the--- matching dimension values will be excluded in the report. The default is--- false.-dfNot :: Lens' DimensionFilter (Maybe Bool)-dfNot = lens _dfNot (\ s a -> s{_dfNot = a})---- | How to match the dimension to the expression. The default is REGEXP.-dfOperator :: Lens' DimensionFilter (Maybe DimensionFilterOperator)-dfOperator-  = lens _dfOperator (\ s a -> s{_dfOperator = a})---- | Strings or regular expression to match against. Only the first value of--- the list is used for comparison unless the operator is \`IN_LIST\`. If--- \`IN_LIST\` operator, then the entire list is used to filter the--- dimensions as explained in the description of the \`IN_LIST\` operator.-dfExpressions :: Lens' DimensionFilter [Text]-dfExpressions-  = lens _dfExpressions-      (\ s a -> s{_dfExpressions = a})-      . _Default-      . _Coerce---- | The dimension to filter on. A DimensionFilter must contain a dimension.-dfDimensionName :: Lens' DimensionFilter (Maybe Text)-dfDimensionName-  = lens _dfDimensionName-      (\ s a -> s{_dfDimensionName = a})---- | Should the match be case sensitive? Default is false.-dfCaseSensitive :: Lens' DimensionFilter (Maybe Bool)-dfCaseSensitive-  = lens _dfCaseSensitive-      (\ s a -> s{_dfCaseSensitive = a})--instance FromJSON DimensionFilter where-        parseJSON-          = withObject "DimensionFilter"-              (\ o ->-                 DimensionFilter' <$>-                   (o .:? "not") <*> (o .:? "operator") <*>-                     (o .:? "expressions" .!= mempty)-                     <*> (o .:? "dimensionName")-                     <*> (o .:? "caseSensitive"))--instance ToJSON DimensionFilter where-        toJSON DimensionFilter'{..}-          = object-              (catMaybes-                 [("not" .=) <$> _dfNot,-                  ("operator" .=) <$> _dfOperator,-                  ("expressions" .=) <$> _dfExpressions,-                  ("dimensionName" .=) <$> _dfDimensionName,-                  ("caseSensitive" .=) <$> _dfCaseSensitive])---- | The main response class which holds the reports from the Reporting API--- \`batchGet\` call.------ /See:/ 'getReportsResponse' smart constructor.-data GetReportsResponse = GetReportsResponse'-    { _grrReports                 :: !(Maybe [Report])-    , _grrResourceQuotasRemaining :: !(Maybe ResourceQuotasRemaining)-    , _grrQueryCost               :: !(Maybe (Textual Int32))-    } deriving (Eq,Show,Data,Typeable,Generic)---- | Creates a value of 'GetReportsResponse' with the minimum fields required to make a request.------ Use one of the following lenses to modify other fields as desired:------ * 'grrReports'------ * 'grrResourceQuotasRemaining'------ * 'grrQueryCost'-getReportsResponse-    :: GetReportsResponse-getReportsResponse =-    GetReportsResponse'-    { _grrReports = Nothing-    , _grrResourceQuotasRemaining = Nothing-    , _grrQueryCost = Nothing-    }---- | Responses corresponding to each of the request.-grrReports :: Lens' GetReportsResponse [Report]-grrReports-  = lens _grrReports (\ s a -> s{_grrReports = a}) .-      _Default-      . _Coerce---- | The amount of resource quota remaining for the property.-grrResourceQuotasRemaining :: Lens' GetReportsResponse (Maybe ResourceQuotasRemaining)-grrResourceQuotasRemaining-  = lens _grrResourceQuotasRemaining-      (\ s a -> s{_grrResourceQuotasRemaining = a})---- | The amount of resource quota tokens deducted to execute the query.--- Includes all responses.-grrQueryCost :: Lens' GetReportsResponse (Maybe Int32)-grrQueryCost-  = lens _grrQueryCost (\ s a -> s{_grrQueryCost = a})-      . mapping _Coerce--instance FromJSON GetReportsResponse where-        parseJSON-          = withObject "GetReportsResponse"-              (\ o ->-                 GetReportsResponse' <$>-                   (o .:? "reports" .!= mempty) <*>-                     (o .:? "resourceQuotasRemaining")-                     <*> (o .:? "queryCost"))--instance ToJSON GetReportsResponse where-        toJSON GetReportsResponse'{..}-          = object-              (catMaybes-                 [("reports" .=) <$> _grrReports,-                  ("resourceQuotasRemaining" .=) <$>-                    _grrResourceQuotasRemaining,-                  ("queryCost" .=) <$> _grrQueryCost])---- | The segment definition, if the report needs to be segmented. A Segment--- is a subset of the Analytics data. For example, of the entire set of--- users, one Segment might be users from a particular country or city.------ /See:/ 'segment' smart constructor.-data Segment = Segment'-    { _sDynamicSegment :: !(Maybe DynamicSegment)-    , _sSegmentId      :: !(Maybe Text)-    } deriving (Eq,Show,Data,Typeable,Generic)---- | Creates a value of 'Segment' with the minimum fields required to make a request.------ Use one of the following lenses to modify other fields as desired:------ * 'sDynamicSegment'------ * 'sSegmentId'-segment-    :: Segment-segment =-    Segment'-    { _sDynamicSegment = Nothing-    , _sSegmentId = Nothing-    }---- | A dynamic segment definition in the request.-sDynamicSegment :: Lens' Segment (Maybe DynamicSegment)-sDynamicSegment-  = lens _sDynamicSegment-      (\ s a -> s{_sDynamicSegment = a})---- | The segment ID of a built-in or custom segment, for example--- \`gaid::-3\`.-sSegmentId :: Lens' Segment (Maybe Text)-sSegmentId-  = lens _sSegmentId (\ s a -> s{_sSegmentId = a})--instance FromJSON Segment where-        parseJSON-          = withObject "Segment"-              (\ o ->-                 Segment' <$>-                   (o .:? "dynamicSegment") <*> (o .:? "segmentId"))--instance ToJSON Segment where-        toJSON Segment'{..}-          = object-              (catMaybes-                 [("dynamicSegment" .=) <$> _sDynamicSegment,-                  ("segmentId" .=) <$> _sSegmentId])---- | The resource quota tokens remaining for the property after the request--- is completed.------ /See:/ 'resourceQuotasRemaining' smart constructor.-data ResourceQuotasRemaining = ResourceQuotasRemaining'-    { _rqrHourlyQuotaTokensRemaining :: !(Maybe (Textual Int32))-    , _rqrDailyQuotaTokensRemaining  :: !(Maybe (Textual Int32))-    } deriving (Eq,Show,Data,Typeable,Generic)---- | Creates a value of 'ResourceQuotasRemaining' with the minimum fields required to make a request.------ Use one of the following lenses to modify other fields as desired:------ * 'rqrHourlyQuotaTokensRemaining'------ * 'rqrDailyQuotaTokensRemaining'-resourceQuotasRemaining-    :: ResourceQuotasRemaining-resourceQuotasRemaining =-    ResourceQuotasRemaining'-    { _rqrHourlyQuotaTokensRemaining = Nothing-    , _rqrDailyQuotaTokensRemaining = Nothing-    }---- | Hourly resource quota tokens remaining.-rqrHourlyQuotaTokensRemaining :: Lens' ResourceQuotasRemaining (Maybe Int32)-rqrHourlyQuotaTokensRemaining-  = lens _rqrHourlyQuotaTokensRemaining-      (\ s a -> s{_rqrHourlyQuotaTokensRemaining = a})-      . mapping _Coerce---- | Daily resource quota remaining remaining.-rqrDailyQuotaTokensRemaining :: Lens' ResourceQuotasRemaining (Maybe Int32)-rqrDailyQuotaTokensRemaining-  = lens _rqrDailyQuotaTokensRemaining-      (\ s a -> s{_rqrDailyQuotaTokensRemaining = a})-      . mapping _Coerce--instance FromJSON ResourceQuotasRemaining where-        parseJSON-          = withObject "ResourceQuotasRemaining"-              (\ o ->-                 ResourceQuotasRemaining' <$>-                   (o .:? "hourlyQuotaTokensRemaining") <*>-                     (o .:? "dailyQuotaTokensRemaining"))--instance ToJSON ResourceQuotasRemaining where-        toJSON ResourceQuotasRemaining'{..}-          = object-              (catMaybes-                 [("hourlyQuotaTokensRemaining" .=) <$>-                    _rqrHourlyQuotaTokensRemaining,-                  ("dailyQuotaTokensRemaining" .=) <$>-                    _rqrDailyQuotaTokensRemaining])---- | Dimension filter specifies the filtering options on a dimension.------ /See:/ 'segmentDimensionFilter' smart constructor.-data SegmentDimensionFilter = SegmentDimensionFilter'-    { _sdfOperator           :: !(Maybe SegmentDimensionFilterOperator)-    , _sdfMinComparisonValue :: !(Maybe Text)-    , _sdfMaxComparisonValue :: !(Maybe Text)-    , _sdfExpressions        :: !(Maybe [Text])-    , _sdfDimensionName      :: !(Maybe Text)-    , _sdfCaseSensitive      :: !(Maybe Bool)-    } deriving (Eq,Show,Data,Typeable,Generic)---- | Creates a value of 'SegmentDimensionFilter' with the minimum fields required to make a request.------ Use one of the following lenses to modify other fields as desired:------ * 'sdfOperator'------ * 'sdfMinComparisonValue'------ * 'sdfMaxComparisonValue'------ * 'sdfExpressions'------ * 'sdfDimensionName'------ * 'sdfCaseSensitive'-segmentDimensionFilter-    :: SegmentDimensionFilter-segmentDimensionFilter =-    SegmentDimensionFilter'-    { _sdfOperator = Nothing-    , _sdfMinComparisonValue = Nothing-    , _sdfMaxComparisonValue = Nothing-    , _sdfExpressions = Nothing-    , _sdfDimensionName = Nothing-    , _sdfCaseSensitive = Nothing-    }---- | The operator to use to match the dimension with the expressions.-sdfOperator :: Lens' SegmentDimensionFilter (Maybe SegmentDimensionFilterOperator)-sdfOperator-  = lens _sdfOperator (\ s a -> s{_sdfOperator = a})---- | Minimum comparison values for \`BETWEEN\` match type.-sdfMinComparisonValue :: Lens' SegmentDimensionFilter (Maybe Text)-sdfMinComparisonValue-  = lens _sdfMinComparisonValue-      (\ s a -> s{_sdfMinComparisonValue = a})---- | Maximum comparison values for \`BETWEEN\` match type.-sdfMaxComparisonValue :: Lens' SegmentDimensionFilter (Maybe Text)-sdfMaxComparisonValue-  = lens _sdfMaxComparisonValue-      (\ s a -> s{_sdfMaxComparisonValue = a})---- | The list of expressions, only the first element is used for all--- operators-sdfExpressions :: Lens' SegmentDimensionFilter [Text]-sdfExpressions-  = lens _sdfExpressions-      (\ s a -> s{_sdfExpressions = a})-      . _Default-      . _Coerce---- | Name of the dimension for which the filter is being applied.-sdfDimensionName :: Lens' SegmentDimensionFilter (Maybe Text)-sdfDimensionName-  = lens _sdfDimensionName-      (\ s a -> s{_sdfDimensionName = a})---- | Should the match be case sensitive, ignored for \`IN_LIST\` operator.-sdfCaseSensitive :: Lens' SegmentDimensionFilter (Maybe Bool)-sdfCaseSensitive-  = lens _sdfCaseSensitive-      (\ s a -> s{_sdfCaseSensitive = a})--instance FromJSON SegmentDimensionFilter where-        parseJSON-          = withObject "SegmentDimensionFilter"-              (\ o ->-                 SegmentDimensionFilter' <$>-                   (o .:? "operator") <*> (o .:? "minComparisonValue")-                     <*> (o .:? "maxComparisonValue")-                     <*> (o .:? "expressions" .!= mempty)-                     <*> (o .:? "dimensionName")-                     <*> (o .:? "caseSensitive"))--instance ToJSON SegmentDimensionFilter where-        toJSON SegmentDimensionFilter'{..}-          = object-              (catMaybes-                 [("operator" .=) <$> _sdfOperator,-                  ("minComparisonValue" .=) <$> _sdfMinComparisonValue,-                  ("maxComparisonValue" .=) <$> _sdfMaxComparisonValue,-                  ("expressions" .=) <$> _sdfExpressions,-                  ("dimensionName" .=) <$> _sdfDimensionName,-                  ("caseSensitive" .=) <$> _sdfCaseSensitive])---- | Dynamic segment definition for defining the segment within the request.--- A segment can select users, sessions or both.------ /See:/ 'dynamicSegment' smart constructor.-data DynamicSegment = DynamicSegment'-    { _dsUserSegment    :: !(Maybe SegmentDefinition)-    , _dsName           :: !(Maybe Text)-    , _dsSessionSegment :: !(Maybe SegmentDefinition)-    } deriving (Eq,Show,Data,Typeable,Generic)---- | Creates a value of 'DynamicSegment' with the minimum fields required to make a request.------ Use one of the following lenses to modify other fields as desired:------ * 'dsUserSegment'------ * 'dsName'------ * 'dsSessionSegment'-dynamicSegment-    :: DynamicSegment-dynamicSegment =-    DynamicSegment'-    { _dsUserSegment = Nothing-    , _dsName = Nothing-    , _dsSessionSegment = Nothing-    }---- | User Segment to select users to include in the segment.-dsUserSegment :: Lens' DynamicSegment (Maybe SegmentDefinition)-dsUserSegment-  = lens _dsUserSegment-      (\ s a -> s{_dsUserSegment = a})---- | The name of the dynamic segment.-dsName :: Lens' DynamicSegment (Maybe Text)-dsName = lens _dsName (\ s a -> s{_dsName = a})---- | Session Segment to select sessions to include in the segment.-dsSessionSegment :: Lens' DynamicSegment (Maybe SegmentDefinition)-dsSessionSegment-  = lens _dsSessionSegment-      (\ s a -> s{_dsSessionSegment = a})--instance FromJSON DynamicSegment where-        parseJSON-          = withObject "DynamicSegment"-              (\ o ->-                 DynamicSegment' <$>-                   (o .:? "userSegment") <*> (o .:? "name") <*>-                     (o .:? "sessionSegment"))--instance ToJSON DynamicSegment where-        toJSON DynamicSegment'{..}-          = object-              (catMaybes-                 [("userSegment" .=) <$> _dsUserSegment,-                  ("name" .=) <$> _dsName,-                  ("sessionSegment" .=) <$> _dsSessionSegment])---- | Represents a group of metric filters. Set the operator value to specify--- how the filters are logically combined.------ /See:/ 'metricFilterClause' smart constructor.-data MetricFilterClause = MetricFilterClause'-    { _mfcOperator :: !(Maybe MetricFilterClauseOperator)-    , _mfcFilters  :: !(Maybe [MetricFilter])-    } deriving (Eq,Show,Data,Typeable,Generic)---- | Creates a value of 'MetricFilterClause' with the minimum fields required to make a request.------ Use one of the following lenses to modify other fields as desired:------ * 'mfcOperator'------ * 'mfcFilters'-metricFilterClause-    :: MetricFilterClause-metricFilterClause =-    MetricFilterClause'-    { _mfcOperator = Nothing-    , _mfcFilters = Nothing-    }---- | The operator for combining multiple metric filters. If unspecified, it--- is treated as an \`OR\`.-mfcOperator :: Lens' MetricFilterClause (Maybe MetricFilterClauseOperator)-mfcOperator-  = lens _mfcOperator (\ s a -> s{_mfcOperator = a})---- | The repeated set of filters. They are logically combined based on the--- operator specified.-mfcFilters :: Lens' MetricFilterClause [MetricFilter]-mfcFilters-  = lens _mfcFilters (\ s a -> s{_mfcFilters = a}) .-      _Default-      . _Coerce--instance FromJSON MetricFilterClause where-        parseJSON-          = withObject "MetricFilterClause"-              (\ o ->-                 MetricFilterClause' <$>-                   (o .:? "operator") <*> (o .:? "filters" .!= mempty))--instance ToJSON MetricFilterClause where-        toJSON MetricFilterClause'{..}-          = object-              (catMaybes-                 [("operator" .=) <$> _mfcOperator,-                  ("filters" .=) <$> _mfcFilters])---- | Column headers.------ /See:/ 'columnHeader' smart constructor.-data ColumnHeader = ColumnHeader'-    { _chMetricHeader :: !(Maybe MetricHeader)-    , _chDimensions   :: !(Maybe [Text])-    } deriving (Eq,Show,Data,Typeable,Generic)---- | Creates a value of 'ColumnHeader' with the minimum fields required to make a request.------ Use one of the following lenses to modify other fields as desired:------ * 'chMetricHeader'------ * 'chDimensions'-columnHeader-    :: ColumnHeader-columnHeader =-    ColumnHeader'-    { _chMetricHeader = Nothing-    , _chDimensions = Nothing-    }---- | Metric headers for the metrics in the response.-chMetricHeader :: Lens' ColumnHeader (Maybe MetricHeader)-chMetricHeader-  = lens _chMetricHeader-      (\ s a -> s{_chMetricHeader = a})---- | The dimension names in the response.-chDimensions :: Lens' ColumnHeader [Text]-chDimensions-  = lens _chDimensions (\ s a -> s{_chDimensions = a})-      . _Default-      . _Coerce--instance FromJSON ColumnHeader where-        parseJSON-          = withObject "ColumnHeader"-              (\ o ->-                 ColumnHeader' <$>-                   (o .:? "metricHeader") <*>-                     (o .:? "dimensions" .!= mempty))--instance ToJSON ColumnHeader where-        toJSON ColumnHeader'{..}-          = object-              (catMaybes-                 [("metricHeader" .=) <$> _chMetricHeader,-                  ("dimensions" .=) <$> _chDimensions])+data MetricFilter =+  MetricFilter'+    { _mfNot             :: !(Maybe Bool)+    , _mfOperator        :: !(Maybe MetricFilterOperator)+    , _mfMetricName      :: !(Maybe Text)+    , _mfComparisonValue :: !(Maybe Text)+    }+  deriving (Eq, Show, Data, Typeable, Generic)+++-- | Creates a value of 'MetricFilter' with the minimum fields required to make a request.+--+-- Use one of the following lenses to modify other fields as desired:+--+-- * 'mfNot'+--+-- * 'mfOperator'+--+-- * 'mfMetricName'+--+-- * 'mfComparisonValue'+metricFilter+    :: MetricFilter+metricFilter =+  MetricFilter'+    { _mfNot = Nothing+    , _mfOperator = Nothing+    , _mfMetricName = Nothing+    , _mfComparisonValue = Nothing+    }+++-- | Logical \`NOT\` operator. If this boolean is set to true, then the+-- matching metric values will be excluded in the report. The default is+-- false.+mfNot :: Lens' MetricFilter (Maybe Bool)+mfNot = lens _mfNot (\ s a -> s{_mfNot = a})++-- | Is the metric \`EQUAL\`, \`LESS_THAN\` or \`GREATER_THAN\` the+-- comparisonValue, the default is \`EQUAL\`. If the operator is+-- \`IS_MISSING\`, checks if the metric is missing and would ignore the+-- comparisonValue.+mfOperator :: Lens' MetricFilter (Maybe MetricFilterOperator)+mfOperator+  = lens _mfOperator (\ s a -> s{_mfOperator = a})++-- | The metric that will be filtered on. A metricFilter must contain a+-- metric name. A metric name can be an alias earlier defined as a metric+-- or it can also be a metric expression.+mfMetricName :: Lens' MetricFilter (Maybe Text)+mfMetricName+  = lens _mfMetricName (\ s a -> s{_mfMetricName = a})++-- | The value to compare against.+mfComparisonValue :: Lens' MetricFilter (Maybe Text)+mfComparisonValue+  = lens _mfComparisonValue+      (\ s a -> s{_mfComparisonValue = a})++instance FromJSON MetricFilter where+        parseJSON+          = withObject "MetricFilter"+              (\ o ->+                 MetricFilter' <$>+                   (o .:? "not") <*> (o .:? "operator") <*>+                     (o .:? "metricName")+                     <*> (o .:? "comparisonValue"))++instance ToJSON MetricFilter where+        toJSON MetricFilter'{..}+          = object+              (catMaybes+                 [("not" .=) <$> _mfNot,+                  ("operator" .=) <$> _mfOperator,+                  ("metricName" .=) <$> _mfMetricName,+                  ("comparisonValue" .=) <$> _mfComparisonValue])++-- | Represents all the details pertaining to an event.+--+-- /See:/ 'eventData' smart constructor.+data EventData =+  EventData'+    { _edEventCategory :: !(Maybe Text)+    , _edEventCount    :: !(Maybe (Textual Int64))+    , _edEventValue    :: !(Maybe (Textual Int64))+    , _edEventLabel    :: !(Maybe Text)+    , _edEventAction   :: !(Maybe Text)+    }+  deriving (Eq, Show, Data, Typeable, Generic)+++-- | Creates a value of 'EventData' with the minimum fields required to make a request.+--+-- Use one of the following lenses to modify other fields as desired:+--+-- * 'edEventCategory'+--+-- * 'edEventCount'+--+-- * 'edEventValue'+--+-- * 'edEventLabel'+--+-- * 'edEventAction'+eventData+    :: EventData+eventData =+  EventData'+    { _edEventCategory = Nothing+    , _edEventCount = Nothing+    , _edEventValue = Nothing+    , _edEventLabel = Nothing+    , _edEventAction = Nothing+    }+++-- | The object on the page that was interacted with. Eg: \'Video\'.+edEventCategory :: Lens' EventData (Maybe Text)+edEventCategory+  = lens _edEventCategory+      (\ s a -> s{_edEventCategory = a})++-- | Number of such events in this activity.+edEventCount :: Lens' EventData (Maybe Int64)+edEventCount+  = lens _edEventCount (\ s a -> s{_edEventCount = a})+      . mapping _Coerce++-- | Numeric value associated with the event.+edEventValue :: Lens' EventData (Maybe Int64)+edEventValue+  = lens _edEventValue (\ s a -> s{_edEventValue = a})+      . mapping _Coerce++-- | Label attached with the event.+edEventLabel :: Lens' EventData (Maybe Text)+edEventLabel+  = lens _edEventLabel (\ s a -> s{_edEventLabel = a})++-- | Type of interaction with the object. Eg: \'play\'.+edEventAction :: Lens' EventData (Maybe Text)+edEventAction+  = lens _edEventAction+      (\ s a -> s{_edEventAction = a})++instance FromJSON EventData where+        parseJSON+          = withObject "EventData"+              (\ o ->+                 EventData' <$>+                   (o .:? "eventCategory") <*> (o .:? "eventCount") <*>+                     (o .:? "eventValue")+                     <*> (o .:? "eventLabel")+                     <*> (o .:? "eventAction"))++instance ToJSON EventData where+        toJSON EventData'{..}+          = object+              (catMaybes+                 [("eventCategory" .=) <$> _edEventCategory,+                  ("eventCount" .=) <$> _edEventCount,+                  ("eventValue" .=) <$> _edEventValue,+                  ("eventLabel" .=) <$> _edEventLabel,+                  ("eventAction" .=) <$> _edEventAction])++-- | A row in the report.+--+-- /See:/ 'reportRow' smart constructor.+data ReportRow =+  ReportRow'+    { _rrMetrics    :: !(Maybe [DateRangeValues])+    , _rrDimensions :: !(Maybe [Text])+    }+  deriving (Eq, Show, Data, Typeable, Generic)+++-- | Creates a value of 'ReportRow' with the minimum fields required to make a request.+--+-- Use one of the following lenses to modify other fields as desired:+--+-- * 'rrMetrics'+--+-- * 'rrDimensions'+reportRow+    :: ReportRow+reportRow = ReportRow' {_rrMetrics = Nothing, _rrDimensions = Nothing}+++-- | List of metrics for each requested DateRange.+rrMetrics :: Lens' ReportRow [DateRangeValues]+rrMetrics+  = lens _rrMetrics (\ s a -> s{_rrMetrics = a}) .+      _Default+      . _Coerce++-- | List of requested dimensions.+rrDimensions :: Lens' ReportRow [Text]+rrDimensions+  = lens _rrDimensions (\ s a -> s{_rrDimensions = a})+      . _Default+      . _Coerce++instance FromJSON ReportRow where+        parseJSON+          = withObject "ReportRow"+              (\ o ->+                 ReportRow' <$>+                   (o .:? "metrics" .!= mempty) <*>+                     (o .:? "dimensions" .!= mempty))++instance ToJSON ReportRow where+        toJSON ReportRow'{..}+          = object+              (catMaybes+                 [("metrics" .=) <$> _rrMetrics,+                  ("dimensions" .=) <$> _rrDimensions])++-- | The headers for the each of the metric column corresponding to the+-- metrics requested in the pivots section of the response.+--+-- /See:/ 'pivotHeaderEntry' smart constructor.+data PivotHeaderEntry =+  PivotHeaderEntry'+    { _pheDimensionValues :: !(Maybe [Text])+    , _pheDimensionNames  :: !(Maybe [Text])+    , _pheMetric          :: !(Maybe MetricHeaderEntry)+    }+  deriving (Eq, Show, Data, Typeable, Generic)+++-- | Creates a value of 'PivotHeaderEntry' with the minimum fields required to make a request.+--+-- Use one of the following lenses to modify other fields as desired:+--+-- * 'pheDimensionValues'+--+-- * 'pheDimensionNames'+--+-- * 'pheMetric'+pivotHeaderEntry+    :: PivotHeaderEntry+pivotHeaderEntry =+  PivotHeaderEntry'+    { _pheDimensionValues = Nothing+    , _pheDimensionNames = Nothing+    , _pheMetric = Nothing+    }+++-- | The values for the dimensions in the pivot.+pheDimensionValues :: Lens' PivotHeaderEntry [Text]+pheDimensionValues+  = lens _pheDimensionValues+      (\ s a -> s{_pheDimensionValues = a})+      . _Default+      . _Coerce++-- | The name of the dimensions in the pivot response.+pheDimensionNames :: Lens' PivotHeaderEntry [Text]+pheDimensionNames+  = lens _pheDimensionNames+      (\ s a -> s{_pheDimensionNames = a})+      . _Default+      . _Coerce++-- | The metric header for the metric in the pivot.+pheMetric :: Lens' PivotHeaderEntry (Maybe MetricHeaderEntry)+pheMetric+  = lens _pheMetric (\ s a -> s{_pheMetric = a})++instance FromJSON PivotHeaderEntry where+        parseJSON+          = withObject "PivotHeaderEntry"+              (\ o ->+                 PivotHeaderEntry' <$>+                   (o .:? "dimensionValues" .!= mempty) <*>+                     (o .:? "dimensionNames" .!= mempty)+                     <*> (o .:? "metric"))++instance ToJSON PivotHeaderEntry where+        toJSON PivotHeaderEntry'{..}+          = object+              (catMaybes+                 [("dimensionValues" .=) <$> _pheDimensionValues,+                  ("dimensionNames" .=) <$> _pheDimensionNames,+                  ("metric" .=) <$> _pheMetric])++-- | The metric values in the pivot region.+--+-- /See:/ 'pivotValueRegion' smart constructor.+newtype PivotValueRegion =+  PivotValueRegion'+    { _pvrValues :: Maybe [Text]+    }+  deriving (Eq, Show, Data, Typeable, Generic)+++-- | Creates a value of 'PivotValueRegion' with the minimum fields required to make a request.+--+-- Use one of the following lenses to modify other fields as desired:+--+-- * 'pvrValues'+pivotValueRegion+    :: PivotValueRegion+pivotValueRegion = PivotValueRegion' {_pvrValues = Nothing}+++-- | The values of the metrics in each of the pivot regions.+pvrValues :: Lens' PivotValueRegion [Text]+pvrValues+  = lens _pvrValues (\ s a -> s{_pvrValues = a}) .+      _Default+      . _Coerce++instance FromJSON PivotValueRegion where+        parseJSON+          = withObject "PivotValueRegion"+              (\ o ->+                 PivotValueRegion' <$> (o .:? "values" .!= mempty))++instance ToJSON PivotValueRegion where+        toJSON PivotValueRegion'{..}+          = object (catMaybes [("values" .=) <$> _pvrValues])++-- | The main request class which specifies the Reporting API request.+--+-- /See:/ 'reportRequest' smart constructor.+data ReportRequest =+  ReportRequest'+    { _rMetrics                :: !(Maybe [Metric])+    , _rPivots                 :: !(Maybe [Pivot])+    , _rCohortGroup            :: !(Maybe CohortGroup)+    , _rSamplingLevel          :: !(Maybe ReportRequestSamplingLevel)+    , _rIncludeEmptyRows       :: !(Maybe Bool)+    , _rDateRanges             :: !(Maybe [DateRange])+    , _rViewId                 :: !(Maybe Text)+    , _rHideTotals             :: !(Maybe Bool)+    , _rHideValueRanges        :: !(Maybe Bool)+    , _rMetricFilterClauses    :: !(Maybe [MetricFilterClause])+    , _rSegments               :: !(Maybe [Segment])+    , _rPageToken              :: !(Maybe Text)+    , _rDimensions             :: !(Maybe [Dimension])+    , _rDimensionFilterClauses :: !(Maybe [DimensionFilterClause])+    , _rPageSize               :: !(Maybe (Textual Int32))+    , _rOrderBys               :: !(Maybe [OrderBy])+    , _rFiltersExpression      :: !(Maybe Text)+    }+  deriving (Eq, Show, Data, Typeable, Generic)+++-- | Creates a value of 'ReportRequest' with the minimum fields required to make a request.+--+-- Use one of the following lenses to modify other fields as desired:+--+-- * 'rMetrics'+--+-- * 'rPivots'+--+-- * 'rCohortGroup'+--+-- * 'rSamplingLevel'+--+-- * 'rIncludeEmptyRows'+--+-- * 'rDateRanges'+--+-- * 'rViewId'+--+-- * 'rHideTotals'+--+-- * 'rHideValueRanges'+--+-- * 'rMetricFilterClauses'+--+-- * 'rSegments'+--+-- * 'rPageToken'+--+-- * 'rDimensions'+--+-- * 'rDimensionFilterClauses'+--+-- * 'rPageSize'+--+-- * 'rOrderBys'+--+-- * 'rFiltersExpression'+reportRequest+    :: ReportRequest+reportRequest =+  ReportRequest'+    { _rMetrics = Nothing+    , _rPivots = Nothing+    , _rCohortGroup = Nothing+    , _rSamplingLevel = Nothing+    , _rIncludeEmptyRows = Nothing+    , _rDateRanges = Nothing+    , _rViewId = Nothing+    , _rHideTotals = Nothing+    , _rHideValueRanges = Nothing+    , _rMetricFilterClauses = Nothing+    , _rSegments = Nothing+    , _rPageToken = Nothing+    , _rDimensions = Nothing+    , _rDimensionFilterClauses = Nothing+    , _rPageSize = Nothing+    , _rOrderBys = Nothing+    , _rFiltersExpression = Nothing+    }+++-- | The metrics requested. Requests must specify at least one metric.+-- Requests can have a total of 10 metrics.+rMetrics :: Lens' ReportRequest [Metric]+rMetrics+  = lens _rMetrics (\ s a -> s{_rMetrics = a}) .+      _Default+      . _Coerce++-- | The pivot definitions. Requests can have a maximum of 2 pivots.+rPivots :: Lens' ReportRequest [Pivot]+rPivots+  = lens _rPivots (\ s a -> s{_rPivots = a}) . _Default+      . _Coerce++-- | Cohort group associated with this request. If there is a cohort group in+-- the request the \`ga:cohort\` dimension must be present. Every+-- [ReportRequest](#ReportRequest) within a \`batchGet\` method must+-- contain the same \`cohortGroup\` definition.+rCohortGroup :: Lens' ReportRequest (Maybe CohortGroup)+rCohortGroup+  = lens _rCohortGroup (\ s a -> s{_rCohortGroup = a})++-- | The desired report+-- [sample](https:\/\/support.google.com\/analytics\/answer\/2637192) size.+-- If the the \`samplingLevel\` field is unspecified the \`DEFAULT\`+-- sampling level is used. Every [ReportRequest](#ReportRequest) within a+-- \`batchGet\` method must contain the same \`samplingLevel\` definition.+-- See [developer+-- guide](\/analytics\/devguides\/reporting\/core\/v4\/basics#sampling) for+-- details.+rSamplingLevel :: Lens' ReportRequest (Maybe ReportRequestSamplingLevel)+rSamplingLevel+  = lens _rSamplingLevel+      (\ s a -> s{_rSamplingLevel = a})++-- | If set to false, the response does not include rows if all the retrieved+-- metrics are equal to zero. The default is false which will exclude these+-- rows.+rIncludeEmptyRows :: Lens' ReportRequest (Maybe Bool)+rIncludeEmptyRows+  = lens _rIncludeEmptyRows+      (\ s a -> s{_rIncludeEmptyRows = a})++-- | Date ranges in the request. The request can have a maximum of 2 date+-- ranges. The response will contain a set of metric values for each+-- combination of the dimensions for each date range in the request. So, if+-- there are two date ranges, there will be two set of metric values, one+-- for the original date range and one for the second date range. The+-- \`reportRequest.dateRanges\` field should not be specified for cohorts+-- or Lifetime value requests. If a date range is not provided, the default+-- date range is (startDate: current date - 7 days, endDate: current date -+-- 1 day). Every [ReportRequest](#ReportRequest) within a \`batchGet\`+-- method must contain the same \`dateRanges\` definition.+rDateRanges :: Lens' ReportRequest [DateRange]+rDateRanges+  = lens _rDateRanges (\ s a -> s{_rDateRanges = a}) .+      _Default+      . _Coerce++-- | The Analytics [view+-- ID](https:\/\/support.google.com\/analytics\/answer\/1009618) from which+-- to retrieve data. Every [ReportRequest](#ReportRequest) within a+-- \`batchGet\` method must contain the same \`viewId\`.+rViewId :: Lens' ReportRequest (Maybe Text)+rViewId = lens _rViewId (\ s a -> s{_rViewId = a})++-- | If set to true, hides the total of all metrics for all the matching+-- rows, for every date range. The default false and will return the+-- totals.+rHideTotals :: Lens' ReportRequest (Maybe Bool)+rHideTotals+  = lens _rHideTotals (\ s a -> s{_rHideTotals = a})++-- | If set to true, hides the minimum and maximum across all matching rows.+-- The default is false and the value ranges are returned.+rHideValueRanges :: Lens' ReportRequest (Maybe Bool)+rHideValueRanges+  = lens _rHideValueRanges+      (\ s a -> s{_rHideValueRanges = a})++-- | The metric filter clauses. They are logically combined with the \`AND\`+-- operator. Metric filters look at only the first date range and not the+-- comparing date range. Note that filtering on metrics occurs after the+-- metrics are aggregated.+rMetricFilterClauses :: Lens' ReportRequest [MetricFilterClause]+rMetricFilterClauses+  = lens _rMetricFilterClauses+      (\ s a -> s{_rMetricFilterClauses = a})+      . _Default+      . _Coerce++-- | Segment the data returned for the request. A segment definition helps+-- look at a subset of the segment request. A request can contain up to+-- four segments. Every [ReportRequest](#ReportRequest) within a+-- \`batchGet\` method must contain the same \`segments\` definition.+-- Requests with segments must have the \`ga:segment\` dimension.+rSegments :: Lens' ReportRequest [Segment]+rSegments+  = lens _rSegments (\ s a -> s{_rSegments = a}) .+      _Default+      . _Coerce++-- | A continuation token to get the next page of the results. Adding this to+-- the request will return the rows after the pageToken. The pageToken+-- should be the value returned in the nextPageToken parameter in the+-- response to the GetReports request.+rPageToken :: Lens' ReportRequest (Maybe Text)+rPageToken+  = lens _rPageToken (\ s a -> s{_rPageToken = a})++-- | The dimensions requested. Requests can have a total of 7 dimensions.+rDimensions :: Lens' ReportRequest [Dimension]+rDimensions+  = lens _rDimensions (\ s a -> s{_rDimensions = a}) .+      _Default+      . _Coerce++-- | The dimension filter clauses for filtering Dimension Values. They are+-- logically combined with the \`AND\` operator. Note that filtering occurs+-- before any dimensions are aggregated, so that the returned metrics+-- represent the total for only the relevant dimensions.+rDimensionFilterClauses :: Lens' ReportRequest [DimensionFilterClause]+rDimensionFilterClauses+  = lens _rDimensionFilterClauses+      (\ s a -> s{_rDimensionFilterClauses = a})+      . _Default+      . _Coerce++-- | Page size is for paging and specifies the maximum number of returned+-- rows. Page size should be >= 0. A query returns the default of 1,000+-- rows. The Analytics Core Reporting API returns a maximum of 100,000 rows+-- per request, no matter how many you ask for. It can also return fewer+-- rows than requested, if there aren\'t as many dimension segments as you+-- expect. For instance, there are fewer than 300 possible values for+-- \`ga:country\`, so when segmenting only by country, you can\'t get more+-- than 300 rows, even if you set \`pageSize\` to a higher value.+rPageSize :: Lens' ReportRequest (Maybe Int32)+rPageSize+  = lens _rPageSize (\ s a -> s{_rPageSize = a}) .+      mapping _Coerce++-- | Sort order on output rows. To compare two rows, the elements of the+-- following are applied in order until a difference is found. All date+-- ranges in the output get the same row order.+rOrderBys :: Lens' ReportRequest [OrderBy]+rOrderBys+  = lens _rOrderBys (\ s a -> s{_rOrderBys = a}) .+      _Default+      . _Coerce++-- | Dimension or metric filters that restrict the data returned for your+-- request. To use the \`filtersExpression\`, supply a dimension or metric+-- on which to filter, followed by the filter expression. For example, the+-- following expression selects \`ga:browser\` dimension which starts with+-- Firefox; \`ga:browser=~^Firefox\`. For more information on dimensions+-- and metric filters, see [Filters+-- reference](https:\/\/developers.google.com\/analytics\/devguides\/reporting\/core\/v3\/reference#filters).+rFiltersExpression :: Lens' ReportRequest (Maybe Text)+rFiltersExpression+  = lens _rFiltersExpression+      (\ s a -> s{_rFiltersExpression = a})++instance FromJSON ReportRequest where+        parseJSON+          = withObject "ReportRequest"+              (\ o ->+                 ReportRequest' <$>+                   (o .:? "metrics" .!= mempty) <*>+                     (o .:? "pivots" .!= mempty)+                     <*> (o .:? "cohortGroup")+                     <*> (o .:? "samplingLevel")+                     <*> (o .:? "includeEmptyRows")+                     <*> (o .:? "dateRanges" .!= mempty)+                     <*> (o .:? "viewId")+                     <*> (o .:? "hideTotals")+                     <*> (o .:? "hideValueRanges")+                     <*> (o .:? "metricFilterClauses" .!= mempty)+                     <*> (o .:? "segments" .!= mempty)+                     <*> (o .:? "pageToken")+                     <*> (o .:? "dimensions" .!= mempty)+                     <*> (o .:? "dimensionFilterClauses" .!= mempty)+                     <*> (o .:? "pageSize")+                     <*> (o .:? "orderBys" .!= mempty)+                     <*> (o .:? "filtersExpression"))++instance ToJSON ReportRequest where+        toJSON ReportRequest'{..}+          = object+              (catMaybes+                 [("metrics" .=) <$> _rMetrics,+                  ("pivots" .=) <$> _rPivots,+                  ("cohortGroup" .=) <$> _rCohortGroup,+                  ("samplingLevel" .=) <$> _rSamplingLevel,+                  ("includeEmptyRows" .=) <$> _rIncludeEmptyRows,+                  ("dateRanges" .=) <$> _rDateRanges,+                  ("viewId" .=) <$> _rViewId,+                  ("hideTotals" .=) <$> _rHideTotals,+                  ("hideValueRanges" .=) <$> _rHideValueRanges,+                  ("metricFilterClauses" .=) <$> _rMetricFilterClauses,+                  ("segments" .=) <$> _rSegments,+                  ("pageToken" .=) <$> _rPageToken,+                  ("dimensions" .=) <$> _rDimensions,+                  ("dimensionFilterClauses" .=) <$>+                    _rDimensionFilterClauses,+                  ("pageSize" .=) <$> _rPageSize,+                  ("orderBys" .=) <$> _rOrderBys,+                  ("filtersExpression" .=) <$> _rFiltersExpression])++-- | Header for the metrics.+--+-- /See:/ 'metricHeaderEntry' smart constructor.+data MetricHeaderEntry =+  MetricHeaderEntry'+    { _mheName :: !(Maybe Text)+    , _mheType :: !(Maybe MetricHeaderEntryType)+    }+  deriving (Eq, Show, Data, Typeable, Generic)+++-- | Creates a value of 'MetricHeaderEntry' with the minimum fields required to make a request.+--+-- Use one of the following lenses to modify other fields as desired:+--+-- * 'mheName'+--+-- * 'mheType'+metricHeaderEntry+    :: MetricHeaderEntry+metricHeaderEntry = MetricHeaderEntry' {_mheName = Nothing, _mheType = Nothing}+++-- | The name of the header.+mheName :: Lens' MetricHeaderEntry (Maybe Text)+mheName = lens _mheName (\ s a -> s{_mheName = a})++-- | The type of the metric, for example \`INTEGER\`.+mheType :: Lens' MetricHeaderEntry (Maybe MetricHeaderEntryType)+mheType = lens _mheType (\ s a -> s{_mheType = a})++instance FromJSON MetricHeaderEntry where+        parseJSON+          = withObject "MetricHeaderEntry"+              (\ o ->+                 MetricHeaderEntry' <$>+                   (o .:? "name") <*> (o .:? "type"))++instance ToJSON MetricHeaderEntry where+        toJSON MetricHeaderEntry'{..}+          = object+              (catMaybes+                 [("name" .=) <$> _mheName, ("type" .=) <$> _mheType])++-- | Represents a set of goals that were reached in an activity.+--+-- /See:/ 'goalSetData' smart constructor.+newtype GoalSetData =+  GoalSetData'+    { _gsdGoals :: Maybe [GoalData]+    }+  deriving (Eq, Show, Data, Typeable, Generic)+++-- | Creates a value of 'GoalSetData' with the minimum fields required to make a request.+--+-- Use one of the following lenses to modify other fields as desired:+--+-- * 'gsdGoals'+goalSetData+    :: GoalSetData+goalSetData = GoalSetData' {_gsdGoals = Nothing}+++-- | All the goals that were reached in the current activity.+gsdGoals :: Lens' GoalSetData [GoalData]+gsdGoals+  = lens _gsdGoals (\ s a -> s{_gsdGoals = a}) .+      _Default+      . _Coerce++instance FromJSON GoalSetData where+        parseJSON+          = withObject "GoalSetData"+              (\ o -> GoalSetData' <$> (o .:? "goals" .!= mempty))++instance ToJSON GoalSetData where+        toJSON GoalSetData'{..}+          = object (catMaybes [("goals" .=) <$> _gsdGoals])++-- | Defines a cohort group. For example: \"cohortGroup\": { \"cohorts\": [{+-- \"name\": \"cohort 1\", \"type\": \"FIRST_VISIT_DATE\", \"dateRange\": {+-- \"startDate\": \"2015-08-01\", \"endDate\": \"2015-08-01\" } },{+-- \"name\": \"cohort 2\" \"type\": \"FIRST_VISIT_DATE\" \"dateRange\": {+-- \"startDate\": \"2015-07-01\", \"endDate\": \"2015-07-01\" } }] }+--+-- /See:/ 'cohortGroup' smart constructor.+data CohortGroup =+  CohortGroup'+    { _cgCohorts       :: !(Maybe [Cohort])+    , _cgLifetimeValue :: !(Maybe Bool)+    }+  deriving (Eq, Show, Data, Typeable, Generic)+++-- | Creates a value of 'CohortGroup' with the minimum fields required to make a request.+--+-- Use one of the following lenses to modify other fields as desired:+--+-- * 'cgCohorts'+--+-- * 'cgLifetimeValue'+cohortGroup+    :: CohortGroup+cohortGroup = CohortGroup' {_cgCohorts = Nothing, _cgLifetimeValue = Nothing}+++-- | The definition for the cohort.+cgCohorts :: Lens' CohortGroup [Cohort]+cgCohorts+  = lens _cgCohorts (\ s a -> s{_cgCohorts = a}) .+      _Default+      . _Coerce++-- | Enable Life Time Value (LTV). LTV measures lifetime value for users+-- acquired through different channels. Please see: [Cohort+-- Analysis](https:\/\/support.google.com\/analytics\/answer\/6074676) and+-- [Lifetime+-- Value](https:\/\/support.google.com\/analytics\/answer\/6182550) If the+-- value of lifetimeValue is false: - The metric values are similar to the+-- values in the web interface cohort report. - The cohort definition date+-- ranges must be aligned to the calendar week and month. i.e. while+-- requesting \`ga:cohortNthWeek\` the \`startDate\` in the cohort+-- definition should be a Sunday and the \`endDate\` should be the+-- following Saturday, and for \`ga:cohortNthMonth\`, the \`startDate\`+-- should be the 1st of the month and \`endDate\` should be the last day of+-- the month. When the lifetimeValue is true: - The metric values will+-- correspond to the values in the web interface LifeTime value report. -+-- The Lifetime Value report shows you how user value (Revenue) and+-- engagement (Appviews, Goal Completions, Sessions, and Session Duration)+-- grow during the 90 days after a user is acquired. - The metrics are+-- calculated as a cumulative average per user per the time increment. -+-- The cohort definition date ranges need not be aligned to the calendar+-- week and month boundaries. - The \`viewId\` must be an [app view+-- ID](https:\/\/support.google.com\/analytics\/answer\/2649553#WebVersusAppViews)+cgLifetimeValue :: Lens' CohortGroup (Maybe Bool)+cgLifetimeValue+  = lens _cgLifetimeValue+      (\ s a -> s{_cgLifetimeValue = a})++instance FromJSON CohortGroup where+        parseJSON+          = withObject "CohortGroup"+              (\ o ->+                 CohortGroup' <$>+                   (o .:? "cohorts" .!= mempty) <*>+                     (o .:? "lifetimeValue"))++instance ToJSON CohortGroup where+        toJSON CohortGroup'{..}+          = object+              (catMaybes+                 [("cohorts" .=) <$> _cgCohorts,+                  ("lifetimeValue" .=) <$> _cgLifetimeValue])++-- | A Simple segment conditions consist of one or more dimension\/metric+-- conditions that can be combined.+--+-- /See:/ 'simpleSegment' smart constructor.+newtype SimpleSegment =+  SimpleSegment'+    { _ssOrFiltersForSegment :: Maybe [OrFiltersForSegment]+    }+  deriving (Eq, Show, Data, Typeable, Generic)+++-- | Creates a value of 'SimpleSegment' with the minimum fields required to make a request.+--+-- Use one of the following lenses to modify other fields as desired:+--+-- * 'ssOrFiltersForSegment'+simpleSegment+    :: SimpleSegment+simpleSegment = SimpleSegment' {_ssOrFiltersForSegment = Nothing}+++-- | A list of segment filters groups which are combined with logical \`AND\`+-- operator.+ssOrFiltersForSegment :: Lens' SimpleSegment [OrFiltersForSegment]+ssOrFiltersForSegment+  = lens _ssOrFiltersForSegment+      (\ s a -> s{_ssOrFiltersForSegment = a})+      . _Default+      . _Coerce++instance FromJSON SimpleSegment where+        parseJSON+          = withObject "SimpleSegment"+              (\ o ->+                 SimpleSegment' <$>+                   (o .:? "orFiltersForSegment" .!= mempty))++instance ToJSON SimpleSegment where+        toJSON SimpleSegment'{..}+          = object+              (catMaybes+                 [("orFiltersForSegment" .=) <$>+                    _ssOrFiltersForSegment])++-- | A group of dimension filters. Set the operator value to specify how the+-- filters are logically combined.+--+-- /See:/ 'dimensionFilterClause' smart constructor.+data DimensionFilterClause =+  DimensionFilterClause'+    { _dfcOperator :: !(Maybe DimensionFilterClauseOperator)+    , _dfcFilters  :: !(Maybe [DimensionFilter])+    }+  deriving (Eq, Show, Data, Typeable, Generic)+++-- | Creates a value of 'DimensionFilterClause' with the minimum fields required to make a request.+--+-- Use one of the following lenses to modify other fields as desired:+--+-- * 'dfcOperator'+--+-- * 'dfcFilters'+dimensionFilterClause+    :: DimensionFilterClause+dimensionFilterClause =+  DimensionFilterClause' {_dfcOperator = Nothing, _dfcFilters = Nothing}+++-- | The operator for combining multiple dimension filters. If unspecified,+-- it is treated as an \`OR\`.+dfcOperator :: Lens' DimensionFilterClause (Maybe DimensionFilterClauseOperator)+dfcOperator+  = lens _dfcOperator (\ s a -> s{_dfcOperator = a})++-- | The repeated set of filters. They are logically combined based on the+-- operator specified.+dfcFilters :: Lens' DimensionFilterClause [DimensionFilter]+dfcFilters+  = lens _dfcFilters (\ s a -> s{_dfcFilters = a}) .+      _Default+      . _Coerce++instance FromJSON DimensionFilterClause where+        parseJSON+          = withObject "DimensionFilterClause"+              (\ o ->+                 DimensionFilterClause' <$>+                   (o .:? "operator") <*> (o .:? "filters" .!= mempty))++instance ToJSON DimensionFilterClause where+        toJSON DimensionFilterClause'{..}+          = object+              (catMaybes+                 [("operator" .=) <$> _dfcOperator,+                  ("filters" .=) <$> _dfcFilters])++-- | Specifies the sorting options.+--+-- /See:/ 'orderBy' smart constructor.+data OrderBy =+  OrderBy'+    { _obOrderType :: !(Maybe OrderByOrderType)+    , _obSortOrder :: !(Maybe OrderBySortOrder)+    , _obFieldName :: !(Maybe Text)+    }+  deriving (Eq, Show, Data, Typeable, Generic)+++-- | Creates a value of 'OrderBy' with the minimum fields required to make a request.+--+-- Use one of the following lenses to modify other fields as desired:+--+-- * 'obOrderType'+--+-- * 'obSortOrder'+--+-- * 'obFieldName'+orderBy+    :: OrderBy+orderBy =+  OrderBy'+    {_obOrderType = Nothing, _obSortOrder = Nothing, _obFieldName = Nothing}+++-- | The order type. The default orderType is \`VALUE\`.+obOrderType :: Lens' OrderBy (Maybe OrderByOrderType)+obOrderType+  = lens _obOrderType (\ s a -> s{_obOrderType = a})++-- | The sorting order for the field.+obSortOrder :: Lens' OrderBy (Maybe OrderBySortOrder)+obSortOrder+  = lens _obSortOrder (\ s a -> s{_obSortOrder = a})++-- | The field which to sort by. The default sort order is ascending.+-- Example: \`ga:browser\`. Note, that you can only specify one field for+-- sort here. For example, \`ga:browser, ga:city\` is not valid.+obFieldName :: Lens' OrderBy (Maybe Text)+obFieldName+  = lens _obFieldName (\ s a -> s{_obFieldName = a})++instance FromJSON OrderBy where+        parseJSON+          = withObject "OrderBy"+              (\ o ->+                 OrderBy' <$>+                   (o .:? "orderType") <*> (o .:? "sortOrder") <*>+                     (o .:? "fieldName"))++instance ToJSON OrderBy where+        toJSON OrderBy'{..}+          = object+              (catMaybes+                 [("orderType" .=) <$> _obOrderType,+                  ("sortOrder" .=) <$> _obSortOrder,+                  ("fieldName" .=) <$> _obFieldName])++-- | [Dimensions](https:\/\/support.google.com\/analytics\/answer\/1033861)+-- are attributes of your data. For example, the dimension \`ga:city\`+-- indicates the city, for example, \"Paris\" or \"New York\", from which a+-- session originates.+--+-- /See:/ 'dimension' smart constructor.+data Dimension =+  Dimension'+    { _dName             :: !(Maybe Text)+    , _dHistogramBuckets :: !(Maybe [Textual Int64])+    }+  deriving (Eq, Show, Data, Typeable, Generic)+++-- | Creates a value of 'Dimension' with the minimum fields required to make a request.+--+-- Use one of the following lenses to modify other fields as desired:+--+-- * 'dName'+--+-- * 'dHistogramBuckets'+dimension+    :: Dimension+dimension = Dimension' {_dName = Nothing, _dHistogramBuckets = Nothing}+++-- | Name of the dimension to fetch, for example \`ga:browser\`.+dName :: Lens' Dimension (Maybe Text)+dName = lens _dName (\ s a -> s{_dName = a})++-- | If non-empty, we place dimension values into buckets after string to+-- int64. Dimension values that are not the string representation of an+-- integral value will be converted to zero. The bucket values have to be+-- in increasing order. Each bucket is closed on the lower end, and open on+-- the upper end. The \"first\" bucket includes all values less than the+-- first boundary, the \"last\" bucket includes all values up to infinity.+-- Dimension values that fall in a bucket get transformed to a new+-- dimension value. For example, if one gives a list of \"0, 1, 3, 4, 7\",+-- then we return the following buckets: - bucket #1: values \< 0,+-- dimension value \"\<0\" - bucket #2: values in [0,1), dimension value+-- \"0\" - bucket #3: values in [1,3), dimension value \"1-2\" - bucket #4:+-- values in [3,4), dimension value \"3\" - bucket #5: values in [4,7),+-- dimension value \"4-6\" - bucket #6: values >= 7, dimension value \"7+\"+-- NOTE: If you are applying histogram mutation on any dimension, and using+-- that dimension in sort, you will want to use the sort type+-- \`HISTOGRAM_BUCKET\` for that purpose. Without that the dimension values+-- will be sorted according to dictionary (lexicographic) order. For+-- example the ascending dictionary order is: \"\<50\", \"1001+\",+-- \"121-1000\", \"50-120\" And the ascending \`HISTOGRAM_BUCKET\` order+-- is: \"\<50\", \"50-120\", \"121-1000\", \"1001+\" The client has to+-- explicitly request \`\"orderType\": \"HISTOGRAM_BUCKET\"\` for a+-- histogram-mutated dimension.+dHistogramBuckets :: Lens' Dimension [Int64]+dHistogramBuckets+  = lens _dHistogramBuckets+      (\ s a -> s{_dHistogramBuckets = a})+      . _Default+      . _Coerce++instance FromJSON Dimension where+        parseJSON+          = withObject "Dimension"+              (\ o ->+                 Dimension' <$>+                   (o .:? "name") <*>+                     (o .:? "histogramBuckets" .!= mempty))++instance ToJSON Dimension where+        toJSON Dimension'{..}+          = object+              (catMaybes+                 [("name" .=) <$> _dName,+                  ("histogramBuckets" .=) <$> _dHistogramBuckets])++-- | Used to return a list of metrics for a single DateRange \/ dimension+-- combination+--+-- /See:/ 'dateRangeValues' smart constructor.+data DateRangeValues =+  DateRangeValues'+    { _drvPivotValueRegions :: !(Maybe [PivotValueRegion])+    , _drvValues            :: !(Maybe [Text])+    }+  deriving (Eq, Show, Data, Typeable, Generic)+++-- | Creates a value of 'DateRangeValues' with the minimum fields required to make a request.+--+-- Use one of the following lenses to modify other fields as desired:+--+-- * 'drvPivotValueRegions'+--+-- * 'drvValues'+dateRangeValues+    :: DateRangeValues+dateRangeValues =+  DateRangeValues' {_drvPivotValueRegions = Nothing, _drvValues = Nothing}+++-- | The values of each pivot region.+drvPivotValueRegions :: Lens' DateRangeValues [PivotValueRegion]+drvPivotValueRegions+  = lens _drvPivotValueRegions+      (\ s a -> s{_drvPivotValueRegions = a})+      . _Default+      . _Coerce++-- | Each value corresponds to each Metric in the request.+drvValues :: Lens' DateRangeValues [Text]+drvValues+  = lens _drvValues (\ s a -> s{_drvValues = a}) .+      _Default+      . _Coerce++instance FromJSON DateRangeValues where+        parseJSON+          = withObject "DateRangeValues"+              (\ o ->+                 DateRangeValues' <$>+                   (o .:? "pivotValueRegions" .!= mempty) <*>+                     (o .:? "values" .!= mempty))++instance ToJSON DateRangeValues where+        toJSON DateRangeValues'{..}+          = object+              (catMaybes+                 [("pivotValueRegions" .=) <$> _drvPivotValueRegions,+                  ("values" .=) <$> _drvValues])++-- | The headers for each of the pivot sections defined in the request.+--+-- /See:/ 'pivotHeader' smart constructor.+data PivotHeader =+  PivotHeader'+    { _phTotalPivotGroupsCount :: !(Maybe (Textual Int32))+    , _phPivotHeaderEntries    :: !(Maybe [PivotHeaderEntry])+    }+  deriving (Eq, Show, Data, Typeable, Generic)+++-- | Creates a value of 'PivotHeader' with the minimum fields required to make a request.+--+-- Use one of the following lenses to modify other fields as desired:+--+-- * 'phTotalPivotGroupsCount'+--+-- * 'phPivotHeaderEntries'+pivotHeader+    :: PivotHeader+pivotHeader =+  PivotHeader'+    {_phTotalPivotGroupsCount = Nothing, _phPivotHeaderEntries = Nothing}+++-- | The total number of groups for this pivot.+phTotalPivotGroupsCount :: Lens' PivotHeader (Maybe Int32)+phTotalPivotGroupsCount+  = lens _phTotalPivotGroupsCount+      (\ s a -> s{_phTotalPivotGroupsCount = a})+      . mapping _Coerce++-- | A single pivot section header.+phPivotHeaderEntries :: Lens' PivotHeader [PivotHeaderEntry]+phPivotHeaderEntries+  = lens _phPivotHeaderEntries+      (\ s a -> s{_phPivotHeaderEntries = a})+      . _Default+      . _Coerce++instance FromJSON PivotHeader where+        parseJSON+          = withObject "PivotHeader"+              (\ o ->+                 PivotHeader' <$>+                   (o .:? "totalPivotGroupsCount") <*>+                     (o .:? "pivotHeaderEntries" .!= mempty))++instance ToJSON PivotHeader where+        toJSON PivotHeader'{..}+          = object+              (catMaybes+                 [("totalPivotGroupsCount" .=) <$>+                    _phTotalPivotGroupsCount,+                  ("pivotHeaderEntries" .=) <$> _phPivotHeaderEntries])++-- | The request to fetch User Report from Reporting API \`userActivity:get\`+-- call.+--+-- /See:/ 'searchUserActivityRequest' smart constructor.+data SearchUserActivityRequest =+  SearchUserActivityRequest'+    { _suarViewId        :: !(Maybe Text)+    , _suarDateRange     :: !(Maybe DateRange)+    , _suarUser          :: !(Maybe User)+    , _suarPageToken     :: !(Maybe Text)+    , _suarPageSize      :: !(Maybe (Textual Int32))+    , _suarActivityTypes :: !(Maybe [Text])+    }+  deriving (Eq, Show, Data, Typeable, Generic)+++-- | Creates a value of 'SearchUserActivityRequest' with the minimum fields required to make a request.+--+-- Use one of the following lenses to modify other fields as desired:+--+-- * 'suarViewId'+--+-- * 'suarDateRange'+--+-- * 'suarUser'+--+-- * 'suarPageToken'+--+-- * 'suarPageSize'+--+-- * 'suarActivityTypes'+searchUserActivityRequest+    :: SearchUserActivityRequest+searchUserActivityRequest =+  SearchUserActivityRequest'+    { _suarViewId = Nothing+    , _suarDateRange = Nothing+    , _suarUser = Nothing+    , _suarPageToken = Nothing+    , _suarPageSize = Nothing+    , _suarActivityTypes = Nothing+    }+++-- | Required. The Analytics [view+-- ID](https:\/\/support.google.com\/analytics\/answer\/1009618) from which+-- to retrieve data. Every+-- [SearchUserActivityRequest](#SearchUserActivityRequest) must contain the+-- \`viewId\`.+suarViewId :: Lens' SearchUserActivityRequest (Maybe Text)+suarViewId+  = lens _suarViewId (\ s a -> s{_suarViewId = a})++-- | Date range for which to retrieve the user activity. If a date range is+-- not provided, the default date range is (startDate: current date - 7+-- days, endDate: current date - 1 day).+suarDateRange :: Lens' SearchUserActivityRequest (Maybe DateRange)+suarDateRange+  = lens _suarDateRange+      (\ s a -> s{_suarDateRange = a})++-- | Required. Unique user Id to query for. Every+-- [SearchUserActivityRequest](#SearchUserActivityRequest) must contain+-- this field.+suarUser :: Lens' SearchUserActivityRequest (Maybe User)+suarUser = lens _suarUser (\ s a -> s{_suarUser = a})++-- | A continuation token to get the next page of the results. Adding this to+-- the request will return the rows after the pageToken. The pageToken+-- should be the value returned in the nextPageToken parameter in the+-- response to the [SearchUserActivityRequest](#SearchUserActivityRequest)+-- request.+suarPageToken :: Lens' SearchUserActivityRequest (Maybe Text)+suarPageToken+  = lens _suarPageToken+      (\ s a -> s{_suarPageToken = a})++-- | Page size is for paging and specifies the maximum number of returned+-- rows. Page size should be > 0. If the value is 0 or if the field isn\'t+-- specified, the request returns the default of 1000 rows per page.+suarPageSize :: Lens' SearchUserActivityRequest (Maybe Int32)+suarPageSize+  = lens _suarPageSize (\ s a -> s{_suarPageSize = a})+      . mapping _Coerce++-- | Set of all activity types being requested. Only acvities matching these+-- types will be returned in the response. If empty, all activies will be+-- returned.+suarActivityTypes :: Lens' SearchUserActivityRequest [Text]+suarActivityTypes+  = lens _suarActivityTypes+      (\ s a -> s{_suarActivityTypes = a})+      . _Default+      . _Coerce++instance FromJSON SearchUserActivityRequest where+        parseJSON+          = withObject "SearchUserActivityRequest"+              (\ o ->+                 SearchUserActivityRequest' <$>+                   (o .:? "viewId") <*> (o .:? "dateRange") <*>+                     (o .:? "user")+                     <*> (o .:? "pageToken")+                     <*> (o .:? "pageSize")+                     <*> (o .:? "activityTypes" .!= mempty))++instance ToJSON SearchUserActivityRequest where+        toJSON SearchUserActivityRequest'{..}+          = object+              (catMaybes+                 [("viewId" .=) <$> _suarViewId,+                  ("dateRange" .=) <$> _suarDateRange,+                  ("user" .=) <$> _suarUser,+                  ("pageToken" .=) <$> _suarPageToken,+                  ("pageSize" .=) <$> _suarPageSize,+                  ("activityTypes" .=) <$> _suarActivityTypes])++-- | The headers for the metrics.+--+-- /See:/ 'metricHeader' smart constructor.+data MetricHeader =+  MetricHeader'+    { _mhPivotHeaders        :: !(Maybe [PivotHeader])+    , _mhMetricHeaderEntries :: !(Maybe [MetricHeaderEntry])+    }+  deriving (Eq, Show, Data, Typeable, Generic)+++-- | Creates a value of 'MetricHeader' with the minimum fields required to make a request.+--+-- Use one of the following lenses to modify other fields as desired:+--+-- * 'mhPivotHeaders'+--+-- * 'mhMetricHeaderEntries'+metricHeader+    :: MetricHeader+metricHeader =+  MetricHeader' {_mhPivotHeaders = Nothing, _mhMetricHeaderEntries = Nothing}+++-- | Headers for the pivots in the response.+mhPivotHeaders :: Lens' MetricHeader [PivotHeader]+mhPivotHeaders+  = lens _mhPivotHeaders+      (\ s a -> s{_mhPivotHeaders = a})+      . _Default+      . _Coerce++-- | Headers for the metrics in the response.+mhMetricHeaderEntries :: Lens' MetricHeader [MetricHeaderEntry]+mhMetricHeaderEntries+  = lens _mhMetricHeaderEntries+      (\ s a -> s{_mhMetricHeaderEntries = a})+      . _Default+      . _Coerce++instance FromJSON MetricHeader where+        parseJSON+          = withObject "MetricHeader"+              (\ o ->+                 MetricHeader' <$>+                   (o .:? "pivotHeaders" .!= mempty) <*>+                     (o .:? "metricHeaderEntries" .!= mempty))++instance ToJSON MetricHeader where+        toJSON MetricHeader'{..}+          = object+              (catMaybes+                 [("pivotHeaders" .=) <$> _mhPivotHeaders,+                  ("metricHeaderEntries" .=) <$>+                    _mhMetricHeaderEntries])++-- | SegmentFilter defines the segment to be either a simple or a sequence+-- segment. A simple segment condition contains dimension and metric+-- conditions to select the sessions or users. A sequence segment condition+-- can be used to select users or sessions based on sequential conditions.+--+-- /See:/ 'segmentFilter' smart constructor.+data SegmentFilter =+  SegmentFilter'+    { _sfNot             :: !(Maybe Bool)+    , _sfSimpleSegment   :: !(Maybe SimpleSegment)+    , _sfSequenceSegment :: !(Maybe SequenceSegment)+    }+  deriving (Eq, Show, Data, Typeable, Generic)+++-- | Creates a value of 'SegmentFilter' with the minimum fields required to make a request.+--+-- Use one of the following lenses to modify other fields as desired:+--+-- * 'sfNot'+--+-- * 'sfSimpleSegment'+--+-- * 'sfSequenceSegment'+segmentFilter+    :: SegmentFilter+segmentFilter =+  SegmentFilter'+    {_sfNot = Nothing, _sfSimpleSegment = Nothing, _sfSequenceSegment = Nothing}+++-- | If true, match the complement of simple or sequence segment. For+-- example, to match all visits not from \"New York\", we can define the+-- segment as follows: \"sessionSegment\": { \"segmentFilters\": [{+-- \"simpleSegment\" :{ \"orFiltersForSegment\": [{+-- \"segmentFilterClauses\":[{ \"dimensionFilter\": { \"dimensionName\":+-- \"ga:city\", \"expressions\": [\"New York\"] } }] }] }, \"not\":+-- \"True\" }] },+sfNot :: Lens' SegmentFilter (Maybe Bool)+sfNot = lens _sfNot (\ s a -> s{_sfNot = a})++-- | A Simple segment conditions consist of one or more dimension\/metric+-- conditions that can be combined+sfSimpleSegment :: Lens' SegmentFilter (Maybe SimpleSegment)+sfSimpleSegment+  = lens _sfSimpleSegment+      (\ s a -> s{_sfSimpleSegment = a})++-- | Sequence conditions consist of one or more steps, where each step is+-- defined by one or more dimension\/metric conditions. Multiple steps can+-- be combined with special sequence operators.+sfSequenceSegment :: Lens' SegmentFilter (Maybe SequenceSegment)+sfSequenceSegment+  = lens _sfSequenceSegment+      (\ s a -> s{_sfSequenceSegment = a})++instance FromJSON SegmentFilter where+        parseJSON+          = withObject "SegmentFilter"+              (\ o ->+                 SegmentFilter' <$>+                   (o .:? "not") <*> (o .:? "simpleSegment") <*>+                     (o .:? "sequenceSegment"))++instance ToJSON SegmentFilter where+        toJSON SegmentFilter'{..}+          = object+              (catMaybes+                 [("not" .=) <$> _sfNot,+                  ("simpleSegment" .=) <$> _sfSimpleSegment,+                  ("sequenceSegment" .=) <$> _sfSequenceSegment])++-- | A contiguous set of days: startDate, startDate + 1 day, ..., endDate.+-- The start and end dates are specified in+-- [ISO8601](https:\/\/en.wikipedia.org\/wiki\/ISO_8601) date format+-- \`YYYY-MM-DD\`.+--+-- /See:/ 'dateRange' smart constructor.+data DateRange =+  DateRange'+    { _drEndDate   :: !(Maybe Text)+    , _drStartDate :: !(Maybe Text)+    }+  deriving (Eq, Show, Data, Typeable, Generic)+++-- | Creates a value of 'DateRange' with the minimum fields required to make a request.+--+-- Use one of the following lenses to modify other fields as desired:+--+-- * 'drEndDate'+--+-- * 'drStartDate'+dateRange+    :: DateRange+dateRange = DateRange' {_drEndDate = Nothing, _drStartDate = Nothing}+++-- | The end date for the query in the format \`YYYY-MM-DD\`.+drEndDate :: Lens' DateRange (Maybe Text)+drEndDate+  = lens _drEndDate (\ s a -> s{_drEndDate = a})++-- | The start date for the query in the format \`YYYY-MM-DD\`.+drStartDate :: Lens' DateRange (Maybe Text)+drStartDate+  = lens _drStartDate (\ s a -> s{_drStartDate = a})++instance FromJSON DateRange where+        parseJSON+          = withObject "DateRange"+              (\ o ->+                 DateRange' <$>+                   (o .:? "endDate") <*> (o .:? "startDate"))++instance ToJSON DateRange where+        toJSON DateRange'{..}+          = object+              (catMaybes+                 [("endDate" .=) <$> _drEndDate,+                  ("startDate" .=) <$> _drStartDate])++-- | The data response corresponding to the request.+--+-- /See:/ 'report' smart constructor.+data Report =+  Report'+    { _rNextPageToken :: !(Maybe Text)+    , _rData          :: !(Maybe ReportData)+    , _rColumnHeader  :: !(Maybe ColumnHeader)+    }+  deriving (Eq, Show, Data, Typeable, Generic)+++-- | Creates a value of 'Report' with the minimum fields required to make a request.+--+-- Use one of the following lenses to modify other fields as desired:+--+-- * 'rNextPageToken'+--+-- * 'rData'+--+-- * 'rColumnHeader'+report+    :: Report+report =+  Report'+    {_rNextPageToken = Nothing, _rData = Nothing, _rColumnHeader = Nothing}+++-- | Page token to retrieve the next page of results in the list.+rNextPageToken :: Lens' Report (Maybe Text)+rNextPageToken+  = lens _rNextPageToken+      (\ s a -> s{_rNextPageToken = a})++-- | Response data.+rData :: Lens' Report (Maybe ReportData)+rData = lens _rData (\ s a -> s{_rData = a})++-- | The column headers.+rColumnHeader :: Lens' Report (Maybe ColumnHeader)+rColumnHeader+  = lens _rColumnHeader+      (\ s a -> s{_rColumnHeader = a})++instance FromJSON Report where+        parseJSON+          = withObject "Report"+              (\ o ->+                 Report' <$>+                   (o .:? "nextPageToken") <*> (o .:? "data") <*>+                     (o .:? "columnHeader"))++instance ToJSON Report where+        toJSON Report'{..}+          = object+              (catMaybes+                 [("nextPageToken" .=) <$> _rNextPageToken,+                  ("data" .=) <$> _rData,+                  ("columnHeader" .=) <$> _rColumnHeader])++-- | Represents details collected when the visitor views a page.+--+-- /See:/ 'pageviewData' smart constructor.+data PageviewData =+  PageviewData'+    { _pdPageTitle :: !(Maybe Text)+    , _pdPagePath  :: !(Maybe Text)+    }+  deriving (Eq, Show, Data, Typeable, Generic)+++-- | Creates a value of 'PageviewData' with the minimum fields required to make a request.+--+-- Use one of the following lenses to modify other fields as desired:+--+-- * 'pdPageTitle'+--+-- * 'pdPagePath'+pageviewData+    :: PageviewData+pageviewData = PageviewData' {_pdPageTitle = Nothing, _pdPagePath = Nothing}+++-- | The title of the page that the visitor viewed.+pdPageTitle :: Lens' PageviewData (Maybe Text)+pdPageTitle+  = lens _pdPageTitle (\ s a -> s{_pdPageTitle = a})++-- | The URL of the page that the visitor viewed.+pdPagePath :: Lens' PageviewData (Maybe Text)+pdPagePath+  = lens _pdPagePath (\ s a -> s{_pdPagePath = a})++instance FromJSON PageviewData where+        parseJSON+          = withObject "PageviewData"+              (\ o ->+                 PageviewData' <$>+                   (o .:? "pageTitle") <*> (o .:? "pagePath"))++instance ToJSON PageviewData where+        toJSON PageviewData'{..}+          = object+              (catMaybes+                 [("pageTitle" .=) <$> _pdPageTitle,+                  ("pagePath" .=) <$> _pdPagePath])++-- | The data part of the report.+--+-- /See:/ 'reportData' smart constructor.+data ReportData =+  ReportData'+    { _rdMinimums           :: !(Maybe [DateRangeValues])+    , _rdRows               :: !(Maybe [ReportRow])+    , _rdTotals             :: !(Maybe [DateRangeValues])+    , _rdSamplesReadCounts  :: !(Maybe [Textual Int64])+    , _rdMaximums           :: !(Maybe [DateRangeValues])+    , _rdDataLastRefreshed  :: !(Maybe DateTime')+    , _rdRowCount           :: !(Maybe (Textual Int32))+    , _rdSamplingSpaceSizes :: !(Maybe [Textual Int64])+    , _rdIsDataGolden       :: !(Maybe Bool)+    }+  deriving (Eq, Show, Data, Typeable, Generic)+++-- | Creates a value of 'ReportData' with the minimum fields required to make a request.+--+-- Use one of the following lenses to modify other fields as desired:+--+-- * 'rdMinimums'+--+-- * 'rdRows'+--+-- * 'rdTotals'+--+-- * 'rdSamplesReadCounts'+--+-- * 'rdMaximums'+--+-- * 'rdDataLastRefreshed'+--+-- * 'rdRowCount'+--+-- * 'rdSamplingSpaceSizes'+--+-- * 'rdIsDataGolden'+reportData+    :: ReportData+reportData =+  ReportData'+    { _rdMinimums = Nothing+    , _rdRows = Nothing+    , _rdTotals = Nothing+    , _rdSamplesReadCounts = Nothing+    , _rdMaximums = Nothing+    , _rdDataLastRefreshed = Nothing+    , _rdRowCount = Nothing+    , _rdSamplingSpaceSizes = Nothing+    , _rdIsDataGolden = Nothing+    }+++-- | Minimum and maximum values seen over all matching rows. These are both+-- empty when \`hideValueRanges\` in the request is false, or when rowCount+-- is zero.+rdMinimums :: Lens' ReportData [DateRangeValues]+rdMinimums+  = lens _rdMinimums (\ s a -> s{_rdMinimums = a}) .+      _Default+      . _Coerce++-- | There\'s one ReportRow for every unique combination of dimensions.+rdRows :: Lens' ReportData [ReportRow]+rdRows+  = lens _rdRows (\ s a -> s{_rdRows = a}) . _Default .+      _Coerce++-- | For each requested date range, for the set of all rows that match the+-- query, every requested value format gets a total. The total for a value+-- format is computed by first totaling the metrics mentioned in the value+-- format and then evaluating the value format as a scalar expression.+-- E.g., The \"totals\" for \`3 \/ (ga:sessions + 2)\` we compute \`3 \/+-- ((sum of all relevant ga:sessions) + 2)\`. Totals are computed before+-- pagination.+rdTotals :: Lens' ReportData [DateRangeValues]+rdTotals+  = lens _rdTotals (\ s a -> s{_rdTotals = a}) .+      _Default+      . _Coerce++-- | If the results are+-- [sampled](https:\/\/support.google.com\/analytics\/answer\/2637192),+-- this returns the total number of samples read, one entry per date range.+-- If the results are not sampled this field will not be defined. See+-- [developer+-- guide](\/analytics\/devguides\/reporting\/core\/v4\/basics#sampling) for+-- details.+rdSamplesReadCounts :: Lens' ReportData [Int64]+rdSamplesReadCounts+  = lens _rdSamplesReadCounts+      (\ s a -> s{_rdSamplesReadCounts = a})+      . _Default+      . _Coerce++-- | Minimum and maximum values seen over all matching rows. These are both+-- empty when \`hideValueRanges\` in the request is false, or when rowCount+-- is zero.+rdMaximums :: Lens' ReportData [DateRangeValues]+rdMaximums+  = lens _rdMaximums (\ s a -> s{_rdMaximums = a}) .+      _Default+      . _Coerce++-- | The last time the data in the report was refreshed. All the hits+-- received before this timestamp are included in the calculation of the+-- report.+rdDataLastRefreshed :: Lens' ReportData (Maybe UTCTime)+rdDataLastRefreshed+  = lens _rdDataLastRefreshed+      (\ s a -> s{_rdDataLastRefreshed = a})+      . mapping _DateTime++-- | Total number of matching rows for this query.+rdRowCount :: Lens' ReportData (Maybe Int32)+rdRowCount+  = lens _rdRowCount (\ s a -> s{_rdRowCount = a}) .+      mapping _Coerce++-- | If the results are+-- [sampled](https:\/\/support.google.com\/analytics\/answer\/2637192),+-- this returns the total number of samples present, one entry per date+-- range. If the results are not sampled this field will not be defined.+-- See [developer+-- guide](\/analytics\/devguides\/reporting\/core\/v4\/basics#sampling) for+-- details.+rdSamplingSpaceSizes :: Lens' ReportData [Int64]+rdSamplingSpaceSizes+  = lens _rdSamplingSpaceSizes+      (\ s a -> s{_rdSamplingSpaceSizes = a})+      . _Default+      . _Coerce++-- | Indicates if response to this request is golden or not. Data is golden+-- when the exact same request will not produce any new results if asked at+-- a later point in time.+rdIsDataGolden :: Lens' ReportData (Maybe Bool)+rdIsDataGolden+  = lens _rdIsDataGolden+      (\ s a -> s{_rdIsDataGolden = a})++instance FromJSON ReportData where+        parseJSON+          = withObject "ReportData"+              (\ o ->+                 ReportData' <$>+                   (o .:? "minimums" .!= mempty) <*>+                     (o .:? "rows" .!= mempty)+                     <*> (o .:? "totals" .!= mempty)+                     <*> (o .:? "samplesReadCounts" .!= mempty)+                     <*> (o .:? "maximums" .!= mempty)+                     <*> (o .:? "dataLastRefreshed")+                     <*> (o .:? "rowCount")+                     <*> (o .:? "samplingSpaceSizes" .!= mempty)+                     <*> (o .:? "isDataGolden"))++instance ToJSON ReportData where+        toJSON ReportData'{..}+          = object+              (catMaybes+                 [("minimums" .=) <$> _rdMinimums,+                  ("rows" .=) <$> _rdRows, ("totals" .=) <$> _rdTotals,+                  ("samplesReadCounts" .=) <$> _rdSamplesReadCounts,+                  ("maximums" .=) <$> _rdMaximums,+                  ("dataLastRefreshed" .=) <$> _rdDataLastRefreshed,+                  ("rowCount" .=) <$> _rdRowCount,+                  ("samplingSpaceSizes" .=) <$> _rdSamplingSpaceSizes,+                  ("isDataGolden" .=) <$> _rdIsDataGolden])++-- | Filter Clause to be used in a segment definition, can be wither a metric+-- or a dimension filter.+--+-- /See:/ 'segmentFilterClause' smart constructor.+data SegmentFilterClause =+  SegmentFilterClause'+    { _sfcMetricFilter    :: !(Maybe SegmentMetricFilter)+    , _sfcNot             :: !(Maybe Bool)+    , _sfcDimensionFilter :: !(Maybe SegmentDimensionFilter)+    }+  deriving (Eq, Show, Data, Typeable, Generic)+++-- | Creates a value of 'SegmentFilterClause' with the minimum fields required to make a request.+--+-- Use one of the following lenses to modify other fields as desired:+--+-- * 'sfcMetricFilter'+--+-- * 'sfcNot'+--+-- * 'sfcDimensionFilter'+segmentFilterClause+    :: SegmentFilterClause+segmentFilterClause =+  SegmentFilterClause'+    { _sfcMetricFilter = Nothing+    , _sfcNot = Nothing+    , _sfcDimensionFilter = Nothing+    }+++-- | Metric Filter for the segment definition.+sfcMetricFilter :: Lens' SegmentFilterClause (Maybe SegmentMetricFilter)+sfcMetricFilter+  = lens _sfcMetricFilter+      (\ s a -> s{_sfcMetricFilter = a})++-- | Matches the complement (\`!\`) of the filter.+sfcNot :: Lens' SegmentFilterClause (Maybe Bool)+sfcNot = lens _sfcNot (\ s a -> s{_sfcNot = a})++-- | Dimension Filter for the segment definition.+sfcDimensionFilter :: Lens' SegmentFilterClause (Maybe SegmentDimensionFilter)+sfcDimensionFilter+  = lens _sfcDimensionFilter+      (\ s a -> s{_sfcDimensionFilter = a})++instance FromJSON SegmentFilterClause where+        parseJSON+          = withObject "SegmentFilterClause"+              (\ o ->+                 SegmentFilterClause' <$>+                   (o .:? "metricFilter") <*> (o .:? "not") <*>+                     (o .:? "dimensionFilter"))++instance ToJSON SegmentFilterClause where+        toJSON SegmentFilterClause'{..}+          = object+              (catMaybes+                 [("metricFilter" .=) <$> _sfcMetricFilter,+                  ("not" .=) <$> _sfcNot,+                  ("dimensionFilter" .=) <$> _sfcDimensionFilter])++-- | A segment sequence definition.+--+-- /See:/ 'segmentSequenceStep' smart constructor.+data SegmentSequenceStep =+  SegmentSequenceStep'+    { _sssMatchType           :: !(Maybe SegmentSequenceStepMatchType)+    , _sssOrFiltersForSegment :: !(Maybe [OrFiltersForSegment])+    }+  deriving (Eq, Show, Data, Typeable, Generic)+++-- | Creates a value of 'SegmentSequenceStep' with the minimum fields required to make a request.+--+-- Use one of the following lenses to modify other fields as desired:+--+-- * 'sssMatchType'+--+-- * 'sssOrFiltersForSegment'+segmentSequenceStep+    :: SegmentSequenceStep+segmentSequenceStep =+  SegmentSequenceStep'+    {_sssMatchType = Nothing, _sssOrFiltersForSegment = Nothing}+++-- | Specifies if the step immediately precedes or can be any time before the+-- next step.+sssMatchType :: Lens' SegmentSequenceStep (Maybe SegmentSequenceStepMatchType)+sssMatchType+  = lens _sssMatchType (\ s a -> s{_sssMatchType = a})++-- | A sequence is specified with a list of Or grouped filters which are+-- combined with \`AND\` operator.+sssOrFiltersForSegment :: Lens' SegmentSequenceStep [OrFiltersForSegment]+sssOrFiltersForSegment+  = lens _sssOrFiltersForSegment+      (\ s a -> s{_sssOrFiltersForSegment = a})+      . _Default+      . _Coerce++instance FromJSON SegmentSequenceStep where+        parseJSON+          = withObject "SegmentSequenceStep"+              (\ o ->+                 SegmentSequenceStep' <$>+                   (o .:? "matchType") <*>+                     (o .:? "orFiltersForSegment" .!= mempty))++instance ToJSON SegmentSequenceStep where+        toJSON SegmentSequenceStep'{..}+          = object+              (catMaybes+                 [("matchType" .=) <$> _sssMatchType,+                  ("orFiltersForSegment" .=) <$>+                    _sssOrFiltersForSegment])++-- | A list of segment filters in the \`OR\` group are combined with the+-- logical OR operator.+--+-- /See:/ 'orFiltersForSegment' smart constructor.+newtype OrFiltersForSegment =+  OrFiltersForSegment'+    { _offsSegmentFilterClauses :: Maybe [SegmentFilterClause]+    }+  deriving (Eq, Show, Data, Typeable, Generic)+++-- | Creates a value of 'OrFiltersForSegment' with the minimum fields required to make a request.+--+-- Use one of the following lenses to modify other fields as desired:+--+-- * 'offsSegmentFilterClauses'+orFiltersForSegment+    :: OrFiltersForSegment+orFiltersForSegment = OrFiltersForSegment' {_offsSegmentFilterClauses = Nothing}+++-- | List of segment filters to be combined with a \`OR\` operator.+offsSegmentFilterClauses :: Lens' OrFiltersForSegment [SegmentFilterClause]+offsSegmentFilterClauses+  = lens _offsSegmentFilterClauses+      (\ s a -> s{_offsSegmentFilterClauses = a})+      . _Default+      . _Coerce++instance FromJSON OrFiltersForSegment where+        parseJSON+          = withObject "OrFiltersForSegment"+              (\ o ->+                 OrFiltersForSegment' <$>+                   (o .:? "segmentFilterClauses" .!= mempty))++instance ToJSON OrFiltersForSegment where+        toJSON OrFiltersForSegment'{..}+          = object+              (catMaybes+                 [("segmentFilterClauses" .=) <$>+                    _offsSegmentFilterClauses])++-- | SegmentDefinition defines the segment to be a set of SegmentFilters+-- which are combined together with a logical \`AND\` operation.+--+-- /See:/ 'segmentDefinition' smart constructor.+newtype SegmentDefinition =+  SegmentDefinition'+    { _sdSegmentFilters :: Maybe [SegmentFilter]+    }+  deriving (Eq, Show, Data, Typeable, Generic)+++-- | Creates a value of 'SegmentDefinition' with the minimum fields required to make a request.+--+-- Use one of the following lenses to modify other fields as desired:+--+-- * 'sdSegmentFilters'+segmentDefinition+    :: SegmentDefinition+segmentDefinition = SegmentDefinition' {_sdSegmentFilters = Nothing}+++-- | A segment is defined by a set of segment filters which are combined+-- together with a logical \`AND\` operation.+sdSegmentFilters :: Lens' SegmentDefinition [SegmentFilter]+sdSegmentFilters+  = lens _sdSegmentFilters+      (\ s a -> s{_sdSegmentFilters = a})+      . _Default+      . _Coerce++instance FromJSON SegmentDefinition where+        parseJSON+          = withObject "SegmentDefinition"+              (\ o ->+                 SegmentDefinition' <$>+                   (o .:? "segmentFilters" .!= mempty))++instance ToJSON SegmentDefinition where+        toJSON SegmentDefinition'{..}+          = object+              (catMaybes+                 [("segmentFilters" .=) <$> _sdSegmentFilters])++-- | Contains information to identify a particular user uniquely.+--+-- /See:/ 'user' smart constructor.+data User =+  User'+    { _uUserId :: !(Maybe Text)+    , _uType   :: !(Maybe UserType)+    }+  deriving (Eq, Show, Data, Typeable, Generic)+++-- | Creates a value of 'User' with the minimum fields required to make a request.+--+-- Use one of the following lenses to modify other fields as desired:+--+-- * 'uUserId'+--+-- * 'uType'+user+    :: User+user = User' {_uUserId = Nothing, _uType = Nothing}+++-- | Unique Id of the user for which the data is being requested.+uUserId :: Lens' User (Maybe Text)+uUserId = lens _uUserId (\ s a -> s{_uUserId = a})++-- | Type of the user in the request. The field \`userId\` is associated with+-- this type.+uType :: Lens' User (Maybe UserType)+uType = lens _uType (\ s a -> s{_uType = a})++instance FromJSON User where+        parseJSON+          = withObject "User"+              (\ o ->+                 User' <$> (o .:? "userId") <*> (o .:? "type"))++instance ToJSON User where+        toJSON User'{..}+          = object+              (catMaybes+                 [("userId" .=) <$> _uUserId, ("type" .=) <$> _uType])++-- | The Pivot describes the pivot section in the request. The Pivot helps+-- rearrange the information in the table for certain reports by pivoting+-- your data on a second dimension.+--+-- /See:/ 'pivot' smart constructor.+data Pivot =+  Pivot'+    { _pStartGroup             :: !(Maybe (Textual Int32))+    , _pMetrics                :: !(Maybe [Metric])+    , _pMaxGroupCount          :: !(Maybe (Textual Int32))+    , _pDimensions             :: !(Maybe [Dimension])+    , _pDimensionFilterClauses :: !(Maybe [DimensionFilterClause])+    }+  deriving (Eq, Show, Data, Typeable, Generic)+++-- | Creates a value of 'Pivot' with the minimum fields required to make a request.+--+-- Use one of the following lenses to modify other fields as desired:+--+-- * 'pStartGroup'+--+-- * 'pMetrics'+--+-- * 'pMaxGroupCount'+--+-- * 'pDimensions'+--+-- * 'pDimensionFilterClauses'+pivot+    :: Pivot+pivot =+  Pivot'+    { _pStartGroup = Nothing+    , _pMetrics = Nothing+    , _pMaxGroupCount = Nothing+    , _pDimensions = Nothing+    , _pDimensionFilterClauses = Nothing+    }+++-- | If k metrics were requested, then the response will contain some+-- data-dependent multiple of k columns in the report. E.g., if you pivoted+-- on the dimension \`ga:browser\` then you\'d get k columns for+-- \"Firefox\", k columns for \"IE\", k columns for \"Chrome\", etc. The+-- ordering of the groups of columns is determined by descending order of+-- \"total\" for the first of the k values. Ties are broken by+-- lexicographic ordering of the first pivot dimension, then lexicographic+-- ordering of the second pivot dimension, and so on. E.g., if the totals+-- for the first value for Firefox, IE, and Chrome were 8, 2, 8,+-- respectively, the order of columns would be Chrome, Firefox, IE. The+-- following let you choose which of the groups of k columns are included+-- in the response.+pStartGroup :: Lens' Pivot (Maybe Int32)+pStartGroup+  = lens _pStartGroup (\ s a -> s{_pStartGroup = a}) .+      mapping _Coerce++-- | The pivot metrics. Pivot metrics are part of the restriction on total+-- number of metrics allowed in the request.+pMetrics :: Lens' Pivot [Metric]+pMetrics+  = lens _pMetrics (\ s a -> s{_pMetrics = a}) .+      _Default+      . _Coerce++-- | Specifies the maximum number of groups to return. The default value is+-- 10, also the maximum value is 1,000.+pMaxGroupCount :: Lens' Pivot (Maybe Int32)+pMaxGroupCount+  = lens _pMaxGroupCount+      (\ s a -> s{_pMaxGroupCount = a})+      . mapping _Coerce++-- | A list of dimensions to show as pivot columns. A Pivot can have a+-- maximum of 4 dimensions. Pivot dimensions are part of the restriction on+-- the total number of dimensions allowed in the request.+pDimensions :: Lens' Pivot [Dimension]+pDimensions+  = lens _pDimensions (\ s a -> s{_pDimensions = a}) .+      _Default+      . _Coerce++-- | DimensionFilterClauses are logically combined with an \`AND\` operator:+-- only data that is included by all these DimensionFilterClauses+-- contributes to the values in this pivot region. Dimension filters can be+-- used to restrict the columns shown in the pivot region. For example if+-- you have \`ga:browser\` as the requested dimension in the pivot region,+-- and you specify key filters to restrict \`ga:browser\` to only \"IE\" or+-- \"Firefox\", then only those two browsers would show up as columns.+pDimensionFilterClauses :: Lens' Pivot [DimensionFilterClause]+pDimensionFilterClauses+  = lens _pDimensionFilterClauses+      (\ s a -> s{_pDimensionFilterClauses = a})+      . _Default+      . _Coerce++instance FromJSON Pivot where+        parseJSON+          = withObject "Pivot"+              (\ o ->+                 Pivot' <$>+                   (o .:? "startGroup") <*> (o .:? "metrics" .!= mempty)+                     <*> (o .:? "maxGroupCount")+                     <*> (o .:? "dimensions" .!= mempty)+                     <*> (o .:? "dimensionFilterClauses" .!= mempty))++instance ToJSON Pivot where+        toJSON Pivot'{..}+          = object+              (catMaybes+                 [("startGroup" .=) <$> _pStartGroup,+                  ("metrics" .=) <$> _pMetrics,+                  ("maxGroupCount" .=) <$> _pMaxGroupCount,+                  ("dimensions" .=) <$> _pDimensions,+                  ("dimensionFilterClauses" .=) <$>+                    _pDimensionFilterClauses])++-- | Represents details collected when the visitor performs a transaction on+-- the page.+--+-- /See:/ 'transactionData' smart constructor.+data TransactionData =+  TransactionData'+    { _tdTransactionId       :: !(Maybe Text)+    , _tdTransactionTax      :: !(Maybe (Textual Double))+    , _tdTransactionShipping :: !(Maybe (Textual Double))+    , _tdTransactionRevenue  :: !(Maybe (Textual Double))+    }+  deriving (Eq, Show, Data, Typeable, Generic)+++-- | Creates a value of 'TransactionData' with the minimum fields required to make a request.+--+-- Use one of the following lenses to modify other fields as desired:+--+-- * 'tdTransactionId'+--+-- * 'tdTransactionTax'+--+-- * 'tdTransactionShipping'+--+-- * 'tdTransactionRevenue'+transactionData+    :: TransactionData+transactionData =+  TransactionData'+    { _tdTransactionId = Nothing+    , _tdTransactionTax = Nothing+    , _tdTransactionShipping = Nothing+    , _tdTransactionRevenue = Nothing+    }+++-- | The transaction ID, supplied by the e-commerce tracking method, for the+-- purchase in the shopping cart.+tdTransactionId :: Lens' TransactionData (Maybe Text)+tdTransactionId+  = lens _tdTransactionId+      (\ s a -> s{_tdTransactionId = a})++-- | Total tax for the transaction.+tdTransactionTax :: Lens' TransactionData (Maybe Double)+tdTransactionTax+  = lens _tdTransactionTax+      (\ s a -> s{_tdTransactionTax = a})+      . mapping _Coerce++-- | Total cost of shipping.+tdTransactionShipping :: Lens' TransactionData (Maybe Double)+tdTransactionShipping+  = lens _tdTransactionShipping+      (\ s a -> s{_tdTransactionShipping = a})+      . mapping _Coerce++-- | The total sale revenue (excluding shipping and tax) of the transaction.+tdTransactionRevenue :: Lens' TransactionData (Maybe Double)+tdTransactionRevenue+  = lens _tdTransactionRevenue+      (\ s a -> s{_tdTransactionRevenue = a})+      . mapping _Coerce++instance FromJSON TransactionData where+        parseJSON+          = withObject "TransactionData"+              (\ o ->+                 TransactionData' <$>+                   (o .:? "transactionId") <*> (o .:? "transactionTax")+                     <*> (o .:? "transactionShipping")+                     <*> (o .:? "transactionRevenue"))++instance ToJSON TransactionData where+        toJSON TransactionData'{..}+          = object+              (catMaybes+                 [("transactionId" .=) <$> _tdTransactionId,+                  ("transactionTax" .=) <$> _tdTransactionTax,+                  ("transactionShipping" .=) <$>+                    _tdTransactionShipping,+                  ("transactionRevenue" .=) <$> _tdTransactionRevenue])++-- | Sequence conditions consist of one or more steps, where each step is+-- defined by one or more dimension\/metric conditions. Multiple steps can+-- be combined with special sequence operators.+--+-- /See:/ 'sequenceSegment' smart constructor.+data SequenceSegment =+  SequenceSegment'+    { _ssFirstStepShouldMatchFirstHit :: !(Maybe Bool)+    , _ssSegmentSequenceSteps         :: !(Maybe [SegmentSequenceStep])+    }+  deriving (Eq, Show, Data, Typeable, Generic)+++-- | Creates a value of 'SequenceSegment' with the minimum fields required to make a request.+--+-- Use one of the following lenses to modify other fields as desired:+--+-- * 'ssFirstStepShouldMatchFirstHit'+--+-- * 'ssSegmentSequenceSteps'+sequenceSegment+    :: SequenceSegment+sequenceSegment =+  SequenceSegment'+    { _ssFirstStepShouldMatchFirstHit = Nothing+    , _ssSegmentSequenceSteps = Nothing+    }+++-- | If set, first step condition must match the first hit of the visitor (in+-- the date range).+ssFirstStepShouldMatchFirstHit :: Lens' SequenceSegment (Maybe Bool)+ssFirstStepShouldMatchFirstHit+  = lens _ssFirstStepShouldMatchFirstHit+      (\ s a -> s{_ssFirstStepShouldMatchFirstHit = a})++-- | The list of steps in the sequence.+ssSegmentSequenceSteps :: Lens' SequenceSegment [SegmentSequenceStep]+ssSegmentSequenceSteps+  = lens _ssSegmentSequenceSteps+      (\ s a -> s{_ssSegmentSequenceSteps = a})+      . _Default+      . _Coerce++instance FromJSON SequenceSegment where+        parseJSON+          = withObject "SequenceSegment"+              (\ o ->+                 SequenceSegment' <$>+                   (o .:? "firstStepShouldMatchFirstHit") <*>+                     (o .:? "segmentSequenceSteps" .!= mempty))++instance ToJSON SequenceSegment where+        toJSON SequenceSegment'{..}+          = object+              (catMaybes+                 [("firstStepShouldMatchFirstHit" .=) <$>+                    _ssFirstStepShouldMatchFirstHit,+                  ("segmentSequenceSteps" .=) <$>+                    _ssSegmentSequenceSteps])++-- | [Metrics](https:\/\/support.google.com\/analytics\/answer\/1033861) are+-- the quantitative measurements. For example, the metric \`ga:users\`+-- indicates the total number of users for the requested time period.+--+-- /See:/ 'metric' smart constructor.+data Metric =+  Metric'+    { _mFormattingType :: !(Maybe MetricFormattingType)+    , _mAlias          :: !(Maybe Text)+    , _mExpression     :: !(Maybe Text)+    }+  deriving (Eq, Show, Data, Typeable, Generic)+++-- | Creates a value of 'Metric' with the minimum fields required to make a request.+--+-- Use one of the following lenses to modify other fields as desired:+--+-- * 'mFormattingType'+--+-- * 'mAlias'+--+-- * 'mExpression'+metric+    :: Metric+metric =+  Metric'+    {_mFormattingType = Nothing, _mAlias = Nothing, _mExpression = Nothing}+++-- | Specifies how the metric expression should be formatted, for example+-- \`INTEGER\`.+mFormattingType :: Lens' Metric (Maybe MetricFormattingType)+mFormattingType+  = lens _mFormattingType+      (\ s a -> s{_mFormattingType = a})++-- | An alias for the metric expression is an alternate name for the+-- expression. The alias can be used for filtering and sorting. This field+-- is optional and is useful if the expression is not a single metric but a+-- complex expression which cannot be used in filtering and sorting. The+-- alias is also used in the response column header.+mAlias :: Lens' Metric (Maybe Text)+mAlias = lens _mAlias (\ s a -> s{_mAlias = a})++-- | A metric expression in the request. An expression is constructed from+-- one or more metrics and numbers. Accepted operators include: Plus (+),+-- Minus (-), Negation (Unary -), Divided by (\/), Multiplied by (*),+-- Parenthesis, Positive cardinal numbers (0-9), can include decimals and+-- is limited to 1024 characters. Example \`ga:totalRefunds\/ga:users\`, in+-- most cases the metric expression is just a single metric name like+-- \`ga:users\`. Adding mixed \`MetricType\` (E.g., \`CURRENCY\` ++-- \`PERCENTAGE\`) metrics will result in unexpected results.+mExpression :: Lens' Metric (Maybe Text)+mExpression+  = lens _mExpression (\ s a -> s{_mExpression = a})++instance FromJSON Metric where+        parseJSON+          = withObject "Metric"+              (\ o ->+                 Metric' <$>+                   (o .:? "formattingType") <*> (o .:? "alias") <*>+                     (o .:? "expression"))++instance ToJSON Metric where+        toJSON Metric'{..}+          = object+              (catMaybes+                 [("formattingType" .=) <$> _mFormattingType,+                  ("alias" .=) <$> _mAlias,+                  ("expression" .=) <$> _mExpression])++-- | Metric filter to be used in a segment filter clause.+--+-- /See:/ 'segmentMetricFilter' smart constructor.+data SegmentMetricFilter =+  SegmentMetricFilter'+    { _smfOperator           :: !(Maybe SegmentMetricFilterOperator)+    , _smfMetricName         :: !(Maybe Text)+    , _smfMaxComparisonValue :: !(Maybe Text)+    , _smfScope              :: !(Maybe SegmentMetricFilterScope)+    , _smfComparisonValue    :: !(Maybe Text)+    }+  deriving (Eq, Show, Data, Typeable, Generic)+++-- | Creates a value of 'SegmentMetricFilter' with the minimum fields required to make a request.+--+-- Use one of the following lenses to modify other fields as desired:+--+-- * 'smfOperator'+--+-- * 'smfMetricName'+--+-- * 'smfMaxComparisonValue'+--+-- * 'smfScope'+--+-- * 'smfComparisonValue'+segmentMetricFilter+    :: SegmentMetricFilter+segmentMetricFilter =+  SegmentMetricFilter'+    { _smfOperator = Nothing+    , _smfMetricName = Nothing+    , _smfMaxComparisonValue = Nothing+    , _smfScope = Nothing+    , _smfComparisonValue = Nothing+    }+++-- | Specifies is the operation to perform to compare the metric. The default+-- is \`EQUAL\`.+smfOperator :: Lens' SegmentMetricFilter (Maybe SegmentMetricFilterOperator)+smfOperator+  = lens _smfOperator (\ s a -> s{_smfOperator = a})++-- | The metric that will be filtered on. A \`metricFilter\` must contain a+-- metric name.+smfMetricName :: Lens' SegmentMetricFilter (Maybe Text)+smfMetricName+  = lens _smfMetricName+      (\ s a -> s{_smfMetricName = a})++-- | Max comparison value is only used for \`BETWEEN\` operator.+smfMaxComparisonValue :: Lens' SegmentMetricFilter (Maybe Text)+smfMaxComparisonValue+  = lens _smfMaxComparisonValue+      (\ s a -> s{_smfMaxComparisonValue = a})++-- | Scope for a metric defines the level at which that metric is defined.+-- The specified metric scope must be equal to or greater than its primary+-- scope as defined in the data model. The primary scope is defined by if+-- the segment is selecting users or sessions.+smfScope :: Lens' SegmentMetricFilter (Maybe SegmentMetricFilterScope)+smfScope = lens _smfScope (\ s a -> s{_smfScope = a})++-- | The value to compare against. If the operator is \`BETWEEN\`, this value+-- is treated as minimum comparison value.+smfComparisonValue :: Lens' SegmentMetricFilter (Maybe Text)+smfComparisonValue+  = lens _smfComparisonValue+      (\ s a -> s{_smfComparisonValue = a})++instance FromJSON SegmentMetricFilter where+        parseJSON+          = withObject "SegmentMetricFilter"+              (\ o ->+                 SegmentMetricFilter' <$>+                   (o .:? "operator") <*> (o .:? "metricName") <*>+                     (o .:? "maxComparisonValue")+                     <*> (o .:? "scope")+                     <*> (o .:? "comparisonValue"))++instance ToJSON SegmentMetricFilter where+        toJSON SegmentMetricFilter'{..}+          = object+              (catMaybes+                 [("operator" .=) <$> _smfOperator,+                  ("metricName" .=) <$> _smfMetricName,+                  ("maxComparisonValue" .=) <$> _smfMaxComparisonValue,+                  ("scope" .=) <$> _smfScope,+                  ("comparisonValue" .=) <$> _smfComparisonValue])++-- | The batch request containing multiple report request.+--+-- /See:/ 'getReportsRequest' smart constructor.+data GetReportsRequest =+  GetReportsRequest'+    { _grrUseResourceQuotas :: !(Maybe Bool)+    , _grrReportRequests    :: !(Maybe [ReportRequest])+    }+  deriving (Eq, Show, Data, Typeable, Generic)+++-- | Creates a value of 'GetReportsRequest' with the minimum fields required to make a request.+--+-- Use one of the following lenses to modify other fields as desired:+--+-- * 'grrUseResourceQuotas'+--+-- * 'grrReportRequests'+getReportsRequest+    :: GetReportsRequest+getReportsRequest =+  GetReportsRequest'+    {_grrUseResourceQuotas = Nothing, _grrReportRequests = Nothing}+++-- | Enables [resource based+-- quotas](\/analytics\/devguides\/reporting\/core\/v4\/limits-quotas#analytics_reporting_api_v4),+-- (defaults to \`False\`). If this field is set to \`True\` the per view+-- (profile) quotas are governed by the computational cost of the request.+-- Note that using cost based quotas will higher enable sampling rates. (10+-- Million for \`SMALL\`, 100M for \`LARGE\`. See the [limits and quotas+-- documentation](\/analytics\/devguides\/reporting\/core\/v4\/limits-quotas#analytics_reporting_api_v4)+-- for details.+grrUseResourceQuotas :: Lens' GetReportsRequest (Maybe Bool)+grrUseResourceQuotas+  = lens _grrUseResourceQuotas+      (\ s a -> s{_grrUseResourceQuotas = a})++-- | Requests, each request will have a separate response. There can be a+-- maximum of 5 requests. All requests should have the same \`dateRanges\`,+-- \`viewId\`, \`segments\`, \`samplingLevel\`, and \`cohortGroup\`.+grrReportRequests :: Lens' GetReportsRequest [ReportRequest]+grrReportRequests+  = lens _grrReportRequests+      (\ s a -> s{_grrReportRequests = a})+      . _Default+      . _Coerce++instance FromJSON GetReportsRequest where+        parseJSON+          = withObject "GetReportsRequest"+              (\ o ->+                 GetReportsRequest' <$>+                   (o .:? "useResourceQuotas") <*>+                     (o .:? "reportRequests" .!= mempty))++instance ToJSON GetReportsRequest where+        toJSON GetReportsRequest'{..}+          = object+              (catMaybes+                 [("useResourceQuotas" .=) <$> _grrUseResourceQuotas,+                  ("reportRequests" .=) <$> _grrReportRequests])++-- | This represents a user session performed on a specific device at a+-- certain time over a period of time.+--+-- /See:/ 'userActivitySession' smart constructor.+data UserActivitySession =+  UserActivitySession'+    { _uasPlatform       :: !(Maybe Text)+    , _uasDeviceCategory :: !(Maybe Text)+    , _uasActivities     :: !(Maybe [Activity])+    , _uasSessionDate    :: !(Maybe Text)+    , _uasDataSource     :: !(Maybe Text)+    , _uasSessionId      :: !(Maybe Text)+    }+  deriving (Eq, Show, Data, Typeable, Generic)+++-- | Creates a value of 'UserActivitySession' with the minimum fields required to make a request.+--+-- Use one of the following lenses to modify other fields as desired:+--+-- * 'uasPlatform'+--+-- * 'uasDeviceCategory'+--+-- * 'uasActivities'+--+-- * 'uasSessionDate'+--+-- * 'uasDataSource'+--+-- * 'uasSessionId'+userActivitySession+    :: UserActivitySession+userActivitySession =+  UserActivitySession'+    { _uasPlatform = Nothing+    , _uasDeviceCategory = Nothing+    , _uasActivities = Nothing+    , _uasSessionDate = Nothing+    , _uasDataSource = Nothing+    , _uasSessionId = Nothing+    }+++-- | Platform on which the activity happened: \"android\", \"ios\" etc.+uasPlatform :: Lens' UserActivitySession (Maybe Text)+uasPlatform+  = lens _uasPlatform (\ s a -> s{_uasPlatform = a})++-- | The type of device used: \"mobile\", \"tablet\" etc.+uasDeviceCategory :: Lens' UserActivitySession (Maybe Text)+uasDeviceCategory+  = lens _uasDeviceCategory+      (\ s a -> s{_uasDeviceCategory = a})++-- | Represents a detailed view into each of the activity in this session.+uasActivities :: Lens' UserActivitySession [Activity]+uasActivities+  = lens _uasActivities+      (\ s a -> s{_uasActivities = a})+      . _Default+      . _Coerce++-- | Date of this session in ISO-8601 format.+uasSessionDate :: Lens' UserActivitySession (Maybe Text)+uasSessionDate+  = lens _uasSessionDate+      (\ s a -> s{_uasSessionDate = a})++-- | The data source of a hit. By default, hits sent from analytics.js are+-- reported as \"web\" and hits sent from the mobile SDKs are reported as+-- \"app\". These values can be overridden in the Measurement Protocol.+uasDataSource :: Lens' UserActivitySession (Maybe Text)+uasDataSource+  = lens _uasDataSource+      (\ s a -> s{_uasDataSource = a})++-- | Unique ID of the session.+uasSessionId :: Lens' UserActivitySession (Maybe Text)+uasSessionId+  = lens _uasSessionId (\ s a -> s{_uasSessionId = a})++instance FromJSON UserActivitySession where+        parseJSON+          = withObject "UserActivitySession"+              (\ o ->+                 UserActivitySession' <$>+                   (o .:? "platform") <*> (o .:? "deviceCategory") <*>+                     (o .:? "activities" .!= mempty)+                     <*> (o .:? "sessionDate")+                     <*> (o .:? "dataSource")+                     <*> (o .:? "sessionId"))++instance ToJSON UserActivitySession where+        toJSON UserActivitySession'{..}+          = object+              (catMaybes+                 [("platform" .=) <$> _uasPlatform,+                  ("deviceCategory" .=) <$> _uasDeviceCategory,+                  ("activities" .=) <$> _uasActivities,+                  ("sessionDate" .=) <$> _uasSessionDate,+                  ("dataSource" .=) <$> _uasDataSource,+                  ("sessionId" .=) <$> _uasSessionId])++-- | Represents all the details pertaining to a goal.+--+-- /See:/ 'goalData' smart constructor.+data GoalData =+  GoalData'+    { _gdGoalPreviousStep2      :: !(Maybe Text)+    , _gdGoalName               :: !(Maybe Text)+    , _gdGoalPreviousStep3      :: !(Maybe Text)+    , _gdGoalIndex              :: !(Maybe (Textual Int32))+    , _gdGoalCompletionLocation :: !(Maybe Text)+    , _gdGoalPreviousStep1      :: !(Maybe Text)+    , _gdGoalCompletions        :: !(Maybe (Textual Int64))+    , _gdGoalValue              :: !(Maybe (Textual Double))+    }+  deriving (Eq, Show, Data, Typeable, Generic)+++-- | Creates a value of 'GoalData' with the minimum fields required to make a request.+--+-- Use one of the following lenses to modify other fields as desired:+--+-- * 'gdGoalPreviousStep2'+--+-- * 'gdGoalName'+--+-- * 'gdGoalPreviousStep3'+--+-- * 'gdGoalIndex'+--+-- * 'gdGoalCompletionLocation'+--+-- * 'gdGoalPreviousStep1'+--+-- * 'gdGoalCompletions'+--+-- * 'gdGoalValue'+goalData+    :: GoalData+goalData =+  GoalData'+    { _gdGoalPreviousStep2 = Nothing+    , _gdGoalName = Nothing+    , _gdGoalPreviousStep3 = Nothing+    , _gdGoalIndex = Nothing+    , _gdGoalCompletionLocation = Nothing+    , _gdGoalPreviousStep1 = Nothing+    , _gdGoalCompletions = Nothing+    , _gdGoalValue = Nothing+    }+++-- | URL of the page two steps prior to the goal completion.+gdGoalPreviousStep2 :: Lens' GoalData (Maybe Text)+gdGoalPreviousStep2+  = lens _gdGoalPreviousStep2+      (\ s a -> s{_gdGoalPreviousStep2 = a})++-- | Name of the goal.+gdGoalName :: Lens' GoalData (Maybe Text)+gdGoalName+  = lens _gdGoalName (\ s a -> s{_gdGoalName = a})++-- | URL of the page three steps prior to the goal completion.+gdGoalPreviousStep3 :: Lens' GoalData (Maybe Text)+gdGoalPreviousStep3+  = lens _gdGoalPreviousStep3+      (\ s a -> s{_gdGoalPreviousStep3 = a})++-- | This identifies the goal as configured for the profile.+gdGoalIndex :: Lens' GoalData (Maybe Int32)+gdGoalIndex+  = lens _gdGoalIndex (\ s a -> s{_gdGoalIndex = a}) .+      mapping _Coerce++-- | URL of the page where this goal was completed.+gdGoalCompletionLocation :: Lens' GoalData (Maybe Text)+gdGoalCompletionLocation+  = lens _gdGoalCompletionLocation+      (\ s a -> s{_gdGoalCompletionLocation = a})++-- | URL of the page one step prior to the goal completion.+gdGoalPreviousStep1 :: Lens' GoalData (Maybe Text)+gdGoalPreviousStep1+  = lens _gdGoalPreviousStep1+      (\ s a -> s{_gdGoalPreviousStep1 = a})++-- | Total number of goal completions in this activity.+gdGoalCompletions :: Lens' GoalData (Maybe Int64)+gdGoalCompletions+  = lens _gdGoalCompletions+      (\ s a -> s{_gdGoalCompletions = a})+      . mapping _Coerce++-- | Value in this goal.+gdGoalValue :: Lens' GoalData (Maybe Double)+gdGoalValue+  = lens _gdGoalValue (\ s a -> s{_gdGoalValue = a}) .+      mapping _Coerce++instance FromJSON GoalData where+        parseJSON+          = withObject "GoalData"+              (\ o ->+                 GoalData' <$>+                   (o .:? "goalPreviousStep2") <*> (o .:? "goalName")+                     <*> (o .:? "goalPreviousStep3")+                     <*> (o .:? "goalIndex")+                     <*> (o .:? "goalCompletionLocation")+                     <*> (o .:? "goalPreviousStep1")+                     <*> (o .:? "goalCompletions")+                     <*> (o .:? "goalValue"))++instance ToJSON GoalData where+        toJSON GoalData'{..}+          = object+              (catMaybes+                 [("goalPreviousStep2" .=) <$> _gdGoalPreviousStep2,+                  ("goalName" .=) <$> _gdGoalName,+                  ("goalPreviousStep3" .=) <$> _gdGoalPreviousStep3,+                  ("goalIndex" .=) <$> _gdGoalIndex,+                  ("goalCompletionLocation" .=) <$>+                    _gdGoalCompletionLocation,+                  ("goalPreviousStep1" .=) <$> _gdGoalPreviousStep1,+                  ("goalCompletions" .=) <$> _gdGoalCompletions,+                  ("goalValue" .=) <$> _gdGoalValue])++-- | An Activity represents data for an activity of a user. Note that an+-- Activity is different from a hit. A hit might result in multiple+-- Activity\'s. For example, if a hit includes a transaction and a goal+-- completion, there will be two Activity protos for this hit, one for+-- ECOMMERCE and one for GOAL. Conversely, multiple hits can also construct+-- one Activity. In classic e-commerce, data for one transaction might be+-- sent through multiple hits. These hits will be merged into one ECOMMERCE+-- Activity.+--+-- /See:/ 'activity' smart constructor.+data Activity =+  Activity'+    { _aEvent           :: !(Maybe EventData)+    , _aHostname        :: !(Maybe Text)+    , _aActivityType    :: !(Maybe ActivityActivityType)+    , _aMedium          :: !(Maybe Text)+    , _aPageview        :: !(Maybe PageviewData)+    , _aCampaign        :: !(Maybe Text)+    , _aGoals           :: !(Maybe GoalSetData)+    , _aChannelGrouping :: !(Maybe Text)+    , _aAppview         :: !(Maybe ScreenviewData)+    , _aSource          :: !(Maybe Text)+    , _aActivityTime    :: !(Maybe DateTime')+    , _aEcommerce       :: !(Maybe EcommerceData)+    , _aCustomDimension :: !(Maybe [CustomDimension])+    , _aKeyword         :: !(Maybe Text)+    , _aLandingPagePath :: !(Maybe Text)+    }+  deriving (Eq, Show, Data, Typeable, Generic)+++-- | Creates a value of 'Activity' with the minimum fields required to make a request.+--+-- Use one of the following lenses to modify other fields as desired:+--+-- * 'aEvent'+--+-- * 'aHostname'+--+-- * 'aActivityType'+--+-- * 'aMedium'+--+-- * 'aPageview'+--+-- * 'aCampaign'+--+-- * 'aGoals'+--+-- * 'aChannelGrouping'+--+-- * 'aAppview'+--+-- * 'aSource'+--+-- * 'aActivityTime'+--+-- * 'aEcommerce'+--+-- * 'aCustomDimension'+--+-- * 'aKeyword'+--+-- * 'aLandingPagePath'+activity+    :: Activity+activity =+  Activity'+    { _aEvent = Nothing+    , _aHostname = Nothing+    , _aActivityType = Nothing+    , _aMedium = Nothing+    , _aPageview = Nothing+    , _aCampaign = Nothing+    , _aGoals = Nothing+    , _aChannelGrouping = Nothing+    , _aAppview = Nothing+    , _aSource = Nothing+    , _aActivityTime = Nothing+    , _aEcommerce = Nothing+    , _aCustomDimension = Nothing+    , _aKeyword = Nothing+    , _aLandingPagePath = Nothing+    }+++-- | This field contains all the details pertaining to an event and will be+-- set if \`activity_type\` equals \`EVENT\`.+aEvent :: Lens' Activity (Maybe EventData)+aEvent = lens _aEvent (\ s a -> s{_aEvent = a})++-- | The hostname from which the tracking request was made.+aHostname :: Lens' Activity (Maybe Text)+aHostname+  = lens _aHostname (\ s a -> s{_aHostname = a})++-- | Type of this activity.+aActivityType :: Lens' Activity (Maybe ActivityActivityType)+aActivityType+  = lens _aActivityType+      (\ s a -> s{_aActivityType = a})++-- | The type of referrals. For manual campaign tracking, it is the value of+-- the utm_medium campaign tracking parameter. For AdWords autotagging, it+-- is cpc. If users came from a search engine detected by Google Analytics,+-- it is organic. If the referrer is not a search engine, it is referral.+-- If users came directly to the property and document.referrer is empty,+-- its value is (none).+aMedium :: Lens' Activity (Maybe Text)+aMedium = lens _aMedium (\ s a -> s{_aMedium = a})++-- | This will be set if \`activity_type\` equals \`PAGEVIEW\`. This field+-- contains all the details about the visitor and the page that was+-- visited.+aPageview :: Lens' Activity (Maybe PageviewData)+aPageview+  = lens _aPageview (\ s a -> s{_aPageview = a})++-- | For manual campaign tracking, it is the value of the utm_campaign+-- campaign tracking parameter. For AdWords autotagging, it is the name(s)+-- of the online ad campaign(s) you use for the property. If you use+-- neither, its value is (not set).+aCampaign :: Lens' Activity (Maybe Text)+aCampaign+  = lens _aCampaign (\ s a -> s{_aCampaign = a})++-- | This field contains a list of all the goals that were reached in this+-- activity when \`activity_type\` equals \`GOAL\`.+aGoals :: Lens' Activity (Maybe GoalSetData)+aGoals = lens _aGoals (\ s a -> s{_aGoals = a})++-- | The Channel Group associated with an end user\'s session for this View+-- (defined by the View\'s Channel Groupings).+aChannelGrouping :: Lens' Activity (Maybe Text)+aChannelGrouping+  = lens _aChannelGrouping+      (\ s a -> s{_aChannelGrouping = a})++-- | This will be set if \`activity_type\` equals \`SCREEN_VIEW\`.+aAppview :: Lens' Activity (Maybe ScreenviewData)+aAppview = lens _aAppview (\ s a -> s{_aAppview = a})++-- | The source of referrals. For manual campaign tracking, it is the value+-- of the utm_source campaign tracking parameter. For AdWords autotagging,+-- it is google. If you use neither, it is the domain of the source (e.g.,+-- document.referrer) referring the users. It may also contain a port+-- address. If users arrived without a referrer, its value is (direct).+aSource :: Lens' Activity (Maybe Text)+aSource = lens _aSource (\ s a -> s{_aSource = a})++-- | Timestamp of the activity.+aActivityTime :: Lens' Activity (Maybe UTCTime)+aActivityTime+  = lens _aActivityTime+      (\ s a -> s{_aActivityTime = a})+      . mapping _DateTime++-- | This will be set if \`activity_type\` equals \`ECOMMERCE\`.+aEcommerce :: Lens' Activity (Maybe EcommerceData)+aEcommerce+  = lens _aEcommerce (\ s a -> s{_aEcommerce = a})++-- | A list of all custom dimensions associated with this activity.+aCustomDimension :: Lens' Activity [CustomDimension]+aCustomDimension+  = lens _aCustomDimension+      (\ s a -> s{_aCustomDimension = a})+      . _Default+      . _Coerce++-- | For manual campaign tracking, it is the value of the utm_term campaign+-- tracking parameter. For AdWords traffic, it contains the best matching+-- targeting criteria. For the display network, where multiple targeting+-- criteria could have caused the ad to show up, it returns the best+-- matching targeting criteria as selected by Ads. This could be+-- display_keyword, site placement, boomuserlist, user_interest, age, or+-- gender. Otherwise its value is (not set).+aKeyword :: Lens' Activity (Maybe Text)+aKeyword = lens _aKeyword (\ s a -> s{_aKeyword = a})++-- | The first page in users\' sessions, or the landing page.+aLandingPagePath :: Lens' Activity (Maybe Text)+aLandingPagePath+  = lens _aLandingPagePath+      (\ s a -> s{_aLandingPagePath = a})++instance FromJSON Activity where+        parseJSON+          = withObject "Activity"+              (\ o ->+                 Activity' <$>+                   (o .:? "event") <*> (o .:? "hostname") <*>+                     (o .:? "activityType")+                     <*> (o .:? "medium")+                     <*> (o .:? "pageview")+                     <*> (o .:? "campaign")+                     <*> (o .:? "goals")+                     <*> (o .:? "channelGrouping")+                     <*> (o .:? "appview")+                     <*> (o .:? "source")+                     <*> (o .:? "activityTime")+                     <*> (o .:? "ecommerce")+                     <*> (o .:? "customDimension" .!= mempty)+                     <*> (o .:? "keyword")+                     <*> (o .:? "landingPagePath"))++instance ToJSON Activity where+        toJSON Activity'{..}+          = object+              (catMaybes+                 [("event" .=) <$> _aEvent,+                  ("hostname" .=) <$> _aHostname,+                  ("activityType" .=) <$> _aActivityType,+                  ("medium" .=) <$> _aMedium,+                  ("pageview" .=) <$> _aPageview,+                  ("campaign" .=) <$> _aCampaign,+                  ("goals" .=) <$> _aGoals,+                  ("channelGrouping" .=) <$> _aChannelGrouping,+                  ("appview" .=) <$> _aAppview,+                  ("source" .=) <$> _aSource,+                  ("activityTime" .=) <$> _aActivityTime,+                  ("ecommerce" .=) <$> _aEcommerce,+                  ("customDimension" .=) <$> _aCustomDimension,+                  ("keyword" .=) <$> _aKeyword,+                  ("landingPagePath" .=) <$> _aLandingPagePath])++-- | Defines a cohort. A cohort is a group of users who share a common+-- characteristic. For example, all users with the same acquisition date+-- belong to the same cohort.+--+-- /See:/ 'cohort' smart constructor.+data Cohort =+  Cohort'+    { _cDateRange :: !(Maybe DateRange)+    , _cName      :: !(Maybe Text)+    , _cType      :: !(Maybe CohortType)+    }+  deriving (Eq, Show, Data, Typeable, Generic)+++-- | Creates a value of 'Cohort' with the minimum fields required to make a request.+--+-- Use one of the following lenses to modify other fields as desired:+--+-- * 'cDateRange'+--+-- * 'cName'+--+-- * 'cType'+cohort+    :: Cohort+cohort = Cohort' {_cDateRange = Nothing, _cName = Nothing, _cType = Nothing}+++-- | This is used for \`FIRST_VISIT_DATE\` cohort, the cohort selects users+-- whose first visit date is between start date and end date defined in the+-- DateRange. The date ranges should be aligned for cohort requests. If the+-- request contains \`ga:cohortNthDay\` it should be exactly one day long,+-- if \`ga:cohortNthWeek\` it should be aligned to the week boundary+-- (starting at Sunday and ending Saturday), and for \`ga:cohortNthMonth\`+-- the date range should be aligned to the month (starting at the first and+-- ending on the last day of the month). For LTV requests there are no such+-- restrictions. You do not need to supply a date range for the+-- \`reportsRequest.dateRanges\` field.+cDateRange :: Lens' Cohort (Maybe DateRange)+cDateRange+  = lens _cDateRange (\ s a -> s{_cDateRange = a})++-- | A unique name for the cohort. If not defined name will be auto-generated+-- with values cohort_[1234...].+cName :: Lens' Cohort (Maybe Text)+cName = lens _cName (\ s a -> s{_cName = a})++-- | Type of the cohort. The only supported type as of now is+-- \`FIRST_VISIT_DATE\`. If this field is unspecified the cohort is treated+-- as \`FIRST_VISIT_DATE\` type cohort.+cType :: Lens' Cohort (Maybe CohortType)+cType = lens _cType (\ s a -> s{_cType = a})++instance FromJSON Cohort where+        parseJSON+          = withObject "Cohort"+              (\ o ->+                 Cohort' <$>+                   (o .:? "dateRange") <*> (o .:? "name") <*>+                     (o .:? "type"))++instance ToJSON Cohort where+        toJSON Cohort'{..}+          = object+              (catMaybes+                 [("dateRange" .=) <$> _cDateRange,+                  ("name" .=) <$> _cName, ("type" .=) <$> _cType])++-- | E-commerce details associated with the user activity.+--+-- /See:/ 'ecommerceData' smart constructor.+data EcommerceData =+  EcommerceData'+    { _edEcommerceType :: !(Maybe EcommerceDataEcommerceType)+    , _edTransaction   :: !(Maybe TransactionData)+    , _edProducts      :: !(Maybe [ProductData])+    , _edActionType    :: !(Maybe EcommerceDataActionType)+    }+  deriving (Eq, Show, Data, Typeable, Generic)+++-- | Creates a value of 'EcommerceData' with the minimum fields required to make a request.+--+-- Use one of the following lenses to modify other fields as desired:+--+-- * 'edEcommerceType'+--+-- * 'edTransaction'+--+-- * 'edProducts'+--+-- * 'edActionType'+ecommerceData+    :: EcommerceData+ecommerceData =+  EcommerceData'+    { _edEcommerceType = Nothing+    , _edTransaction = Nothing+    , _edProducts = Nothing+    , _edActionType = Nothing+    }+++-- | The type of this e-commerce activity.+edEcommerceType :: Lens' EcommerceData (Maybe EcommerceDataEcommerceType)+edEcommerceType+  = lens _edEcommerceType+      (\ s a -> s{_edEcommerceType = a})++-- | Transaction details of this e-commerce action.+edTransaction :: Lens' EcommerceData (Maybe TransactionData)+edTransaction+  = lens _edTransaction+      (\ s a -> s{_edTransaction = a})++-- | Details of the products in this transaction.+edProducts :: Lens' EcommerceData [ProductData]+edProducts+  = lens _edProducts (\ s a -> s{_edProducts = a}) .+      _Default+      . _Coerce++-- | Action associated with this e-commerce action.+edActionType :: Lens' EcommerceData (Maybe EcommerceDataActionType)+edActionType+  = lens _edActionType (\ s a -> s{_edActionType = a})++instance FromJSON EcommerceData where+        parseJSON+          = withObject "EcommerceData"+              (\ o ->+                 EcommerceData' <$>+                   (o .:? "ecommerceType") <*> (o .:? "transaction") <*>+                     (o .:? "products" .!= mempty)+                     <*> (o .:? "actionType"))++instance ToJSON EcommerceData where+        toJSON EcommerceData'{..}+          = object+              (catMaybes+                 [("ecommerceType" .=) <$> _edEcommerceType,+                  ("transaction" .=) <$> _edTransaction,+                  ("products" .=) <$> _edProducts,+                  ("actionType" .=) <$> _edActionType])++-- | Dimension filter specifies the filtering options on a dimension.+--+-- /See:/ 'dimensionFilter' smart constructor.+data DimensionFilter =+  DimensionFilter'+    { _dfNot           :: !(Maybe Bool)+    , _dfOperator      :: !(Maybe DimensionFilterOperator)+    , _dfExpressions   :: !(Maybe [Text])+    , _dfDimensionName :: !(Maybe Text)+    , _dfCaseSensitive :: !(Maybe Bool)+    }+  deriving (Eq, Show, Data, Typeable, Generic)+++-- | Creates a value of 'DimensionFilter' with the minimum fields required to make a request.+--+-- Use one of the following lenses to modify other fields as desired:+--+-- * 'dfNot'+--+-- * 'dfOperator'+--+-- * 'dfExpressions'+--+-- * 'dfDimensionName'+--+-- * 'dfCaseSensitive'+dimensionFilter+    :: DimensionFilter+dimensionFilter =+  DimensionFilter'+    { _dfNot = Nothing+    , _dfOperator = Nothing+    , _dfExpressions = Nothing+    , _dfDimensionName = Nothing+    , _dfCaseSensitive = Nothing+    }+++-- | Logical \`NOT\` operator. If this boolean is set to true, then the+-- matching dimension values will be excluded in the report. The default is+-- false.+dfNot :: Lens' DimensionFilter (Maybe Bool)+dfNot = lens _dfNot (\ s a -> s{_dfNot = a})++-- | How to match the dimension to the expression. The default is REGEXP.+dfOperator :: Lens' DimensionFilter (Maybe DimensionFilterOperator)+dfOperator+  = lens _dfOperator (\ s a -> s{_dfOperator = a})++-- | Strings or regular expression to match against. Only the first value of+-- the list is used for comparison unless the operator is \`IN_LIST\`. If+-- \`IN_LIST\` operator, then the entire list is used to filter the+-- dimensions as explained in the description of the \`IN_LIST\` operator.+dfExpressions :: Lens' DimensionFilter [Text]+dfExpressions+  = lens _dfExpressions+      (\ s a -> s{_dfExpressions = a})+      . _Default+      . _Coerce++-- | The dimension to filter on. A DimensionFilter must contain a dimension.+dfDimensionName :: Lens' DimensionFilter (Maybe Text)+dfDimensionName+  = lens _dfDimensionName+      (\ s a -> s{_dfDimensionName = a})++-- | Should the match be case sensitive? Default is false.+dfCaseSensitive :: Lens' DimensionFilter (Maybe Bool)+dfCaseSensitive+  = lens _dfCaseSensitive+      (\ s a -> s{_dfCaseSensitive = a})++instance FromJSON DimensionFilter where+        parseJSON+          = withObject "DimensionFilter"+              (\ o ->+                 DimensionFilter' <$>+                   (o .:? "not") <*> (o .:? "operator") <*>+                     (o .:? "expressions" .!= mempty)+                     <*> (o .:? "dimensionName")+                     <*> (o .:? "caseSensitive"))++instance ToJSON DimensionFilter where+        toJSON DimensionFilter'{..}+          = object+              (catMaybes+                 [("not" .=) <$> _dfNot,+                  ("operator" .=) <$> _dfOperator,+                  ("expressions" .=) <$> _dfExpressions,+                  ("dimensionName" .=) <$> _dfDimensionName,+                  ("caseSensitive" .=) <$> _dfCaseSensitive])++-- | The main response class which holds the reports from the Reporting API+-- \`batchGet\` call.+--+-- /See:/ 'getReportsResponse' smart constructor.+data GetReportsResponse =+  GetReportsResponse'+    { _grrReports                 :: !(Maybe [Report])+    , _grrResourceQuotasRemaining :: !(Maybe ResourceQuotasRemaining)+    , _grrQueryCost               :: !(Maybe (Textual Int32))+    }+  deriving (Eq, Show, Data, Typeable, Generic)+++-- | Creates a value of 'GetReportsResponse' with the minimum fields required to make a request.+--+-- Use one of the following lenses to modify other fields as desired:+--+-- * 'grrReports'+--+-- * 'grrResourceQuotasRemaining'+--+-- * 'grrQueryCost'+getReportsResponse+    :: GetReportsResponse+getReportsResponse =+  GetReportsResponse'+    { _grrReports = Nothing+    , _grrResourceQuotasRemaining = Nothing+    , _grrQueryCost = Nothing+    }+++-- | Responses corresponding to each of the request.+grrReports :: Lens' GetReportsResponse [Report]+grrReports+  = lens _grrReports (\ s a -> s{_grrReports = a}) .+      _Default+      . _Coerce++-- | The amount of resource quota remaining for the property.+grrResourceQuotasRemaining :: Lens' GetReportsResponse (Maybe ResourceQuotasRemaining)+grrResourceQuotasRemaining+  = lens _grrResourceQuotasRemaining+      (\ s a -> s{_grrResourceQuotasRemaining = a})++-- | The amount of resource quota tokens deducted to execute the query.+-- Includes all responses.+grrQueryCost :: Lens' GetReportsResponse (Maybe Int32)+grrQueryCost+  = lens _grrQueryCost (\ s a -> s{_grrQueryCost = a})+      . mapping _Coerce++instance FromJSON GetReportsResponse where+        parseJSON+          = withObject "GetReportsResponse"+              (\ o ->+                 GetReportsResponse' <$>+                   (o .:? "reports" .!= mempty) <*>+                     (o .:? "resourceQuotasRemaining")+                     <*> (o .:? "queryCost"))++instance ToJSON GetReportsResponse where+        toJSON GetReportsResponse'{..}+          = object+              (catMaybes+                 [("reports" .=) <$> _grrReports,+                  ("resourceQuotasRemaining" .=) <$>+                    _grrResourceQuotasRemaining,+                  ("queryCost" .=) <$> _grrQueryCost])++-- | Custom dimension.+--+-- /See:/ 'customDimension' smart constructor.+data CustomDimension =+  CustomDimension'+    { _cdValue :: !(Maybe Text)+    , _cdIndex :: !(Maybe (Textual Int32))+    }+  deriving (Eq, Show, Data, Typeable, Generic)+++-- | Creates a value of 'CustomDimension' with the minimum fields required to make a request.+--+-- Use one of the following lenses to modify other fields as desired:+--+-- * 'cdValue'+--+-- * 'cdIndex'+customDimension+    :: CustomDimension+customDimension = CustomDimension' {_cdValue = Nothing, _cdIndex = Nothing}+++-- | Value of the custom dimension. Default value (i.e. empty string)+-- indicates clearing sesion\/visitor scope custom dimension value.+cdValue :: Lens' CustomDimension (Maybe Text)+cdValue = lens _cdValue (\ s a -> s{_cdValue = a})++-- | Slot number of custom dimension.+cdIndex :: Lens' CustomDimension (Maybe Int32)+cdIndex+  = lens _cdIndex (\ s a -> s{_cdIndex = a}) .+      mapping _Coerce++instance FromJSON CustomDimension where+        parseJSON+          = withObject "CustomDimension"+              (\ o ->+                 CustomDimension' <$>+                   (o .:? "value") <*> (o .:? "index"))++instance ToJSON CustomDimension where+        toJSON CustomDimension'{..}+          = object+              (catMaybes+                 [("value" .=) <$> _cdValue,+                  ("index" .=) <$> _cdIndex])++-- | The segment definition, if the report needs to be segmented. A Segment+-- is a subset of the Analytics data. For example, of the entire set of+-- users, one Segment might be users from a particular country or city.+--+-- /See:/ 'segment' smart constructor.+data Segment =+  Segment'+    { _sDynamicSegment :: !(Maybe DynamicSegment)+    , _sSegmentId      :: !(Maybe Text)+    }+  deriving (Eq, Show, Data, Typeable, Generic)+++-- | Creates a value of 'Segment' with the minimum fields required to make a request.+--+-- Use one of the following lenses to modify other fields as desired:+--+-- * 'sDynamicSegment'+--+-- * 'sSegmentId'+segment+    :: Segment+segment = Segment' {_sDynamicSegment = Nothing, _sSegmentId = Nothing}+++-- | A dynamic segment definition in the request.+sDynamicSegment :: Lens' Segment (Maybe DynamicSegment)+sDynamicSegment+  = lens _sDynamicSegment+      (\ s a -> s{_sDynamicSegment = a})++-- | The segment ID of a built-in or custom segment, for example+-- \`gaid::-3\`.+sSegmentId :: Lens' Segment (Maybe Text)+sSegmentId+  = lens _sSegmentId (\ s a -> s{_sSegmentId = a})++instance FromJSON Segment where+        parseJSON+          = withObject "Segment"+              (\ o ->+                 Segment' <$>+                   (o .:? "dynamicSegment") <*> (o .:? "segmentId"))++instance ToJSON Segment where+        toJSON Segment'{..}+          = object+              (catMaybes+                 [("dynamicSegment" .=) <$> _sDynamicSegment,+                  ("segmentId" .=) <$> _sSegmentId])++-- | Details of the products in an e-commerce transaction.+--+-- /See:/ 'productData' smart constructor.+data ProductData =+  ProductData'+    { _pdProductName     :: !(Maybe Text)+    , _pdProductSKU      :: !(Maybe Text)+    , _pdItemRevenue     :: !(Maybe (Textual Double))+    , _pdProductQuantity :: !(Maybe (Textual Int64))+    }+  deriving (Eq, Show, Data, Typeable, Generic)+++-- | Creates a value of 'ProductData' with the minimum fields required to make a request.+--+-- Use one of the following lenses to modify other fields as desired:+--+-- * 'pdProductName'+--+-- * 'pdProductSKU'+--+-- * 'pdItemRevenue'+--+-- * 'pdProductQuantity'+productData+    :: ProductData+productData =+  ProductData'+    { _pdProductName = Nothing+    , _pdProductSKU = Nothing+    , _pdItemRevenue = Nothing+    , _pdProductQuantity = Nothing+    }+++-- | The product name, supplied by the e-commerce tracking application, for+-- the purchased items.+pdProductName :: Lens' ProductData (Maybe Text)+pdProductName+  = lens _pdProductName+      (\ s a -> s{_pdProductName = a})++-- | Unique code that represents the product.+pdProductSKU :: Lens' ProductData (Maybe Text)+pdProductSKU+  = lens _pdProductSKU (\ s a -> s{_pdProductSKU = a})++-- | The total revenue from purchased product items.+pdItemRevenue :: Lens' ProductData (Maybe Double)+pdItemRevenue+  = lens _pdItemRevenue+      (\ s a -> s{_pdItemRevenue = a})+      . mapping _Coerce++-- | Total number of this product units in the transaction.+pdProductQuantity :: Lens' ProductData (Maybe Int64)+pdProductQuantity+  = lens _pdProductQuantity+      (\ s a -> s{_pdProductQuantity = a})+      . mapping _Coerce++instance FromJSON ProductData where+        parseJSON+          = withObject "ProductData"+              (\ o ->+                 ProductData' <$>+                   (o .:? "productName") <*> (o .:? "productSku") <*>+                     (o .:? "itemRevenue")+                     <*> (o .:? "productQuantity"))++instance ToJSON ProductData where+        toJSON ProductData'{..}+          = object+              (catMaybes+                 [("productName" .=) <$> _pdProductName,+                  ("productSku" .=) <$> _pdProductSKU,+                  ("itemRevenue" .=) <$> _pdItemRevenue,+                  ("productQuantity" .=) <$> _pdProductQuantity])++-- | The resource quota tokens remaining for the property after the request+-- is completed.+--+-- /See:/ 'resourceQuotasRemaining' smart constructor.+data ResourceQuotasRemaining =+  ResourceQuotasRemaining'+    { _rqrHourlyQuotaTokensRemaining :: !(Maybe (Textual Int32))+    , _rqrDailyQuotaTokensRemaining  :: !(Maybe (Textual Int32))+    }+  deriving (Eq, Show, Data, Typeable, Generic)+++-- | Creates a value of 'ResourceQuotasRemaining' with the minimum fields required to make a request.+--+-- Use one of the following lenses to modify other fields as desired:+--+-- * 'rqrHourlyQuotaTokensRemaining'+--+-- * 'rqrDailyQuotaTokensRemaining'+resourceQuotasRemaining+    :: ResourceQuotasRemaining+resourceQuotasRemaining =+  ResourceQuotasRemaining'+    { _rqrHourlyQuotaTokensRemaining = Nothing+    , _rqrDailyQuotaTokensRemaining = Nothing+    }+++-- | Hourly resource quota tokens remaining.+rqrHourlyQuotaTokensRemaining :: Lens' ResourceQuotasRemaining (Maybe Int32)+rqrHourlyQuotaTokensRemaining+  = lens _rqrHourlyQuotaTokensRemaining+      (\ s a -> s{_rqrHourlyQuotaTokensRemaining = a})+      . mapping _Coerce++-- | Daily resource quota remaining remaining.+rqrDailyQuotaTokensRemaining :: Lens' ResourceQuotasRemaining (Maybe Int32)+rqrDailyQuotaTokensRemaining+  = lens _rqrDailyQuotaTokensRemaining+      (\ s a -> s{_rqrDailyQuotaTokensRemaining = a})+      . mapping _Coerce++instance FromJSON ResourceQuotasRemaining where+        parseJSON+          = withObject "ResourceQuotasRemaining"+              (\ o ->+                 ResourceQuotasRemaining' <$>+                   (o .:? "hourlyQuotaTokensRemaining") <*>+                     (o .:? "dailyQuotaTokensRemaining"))++instance ToJSON ResourceQuotasRemaining where+        toJSON ResourceQuotasRemaining'{..}+          = object+              (catMaybes+                 [("hourlyQuotaTokensRemaining" .=) <$>+                    _rqrHourlyQuotaTokensRemaining,+                  ("dailyQuotaTokensRemaining" .=) <$>+                    _rqrDailyQuotaTokensRemaining])++-- | Dimension filter specifies the filtering options on a dimension.+--+-- /See:/ 'segmentDimensionFilter' smart constructor.+data SegmentDimensionFilter =+  SegmentDimensionFilter'+    { _sdfOperator           :: !(Maybe SegmentDimensionFilterOperator)+    , _sdfMinComparisonValue :: !(Maybe Text)+    , _sdfMaxComparisonValue :: !(Maybe Text)+    , _sdfExpressions        :: !(Maybe [Text])+    , _sdfDimensionName      :: !(Maybe Text)+    , _sdfCaseSensitive      :: !(Maybe Bool)+    }+  deriving (Eq, Show, Data, Typeable, Generic)+++-- | Creates a value of 'SegmentDimensionFilter' with the minimum fields required to make a request.+--+-- Use one of the following lenses to modify other fields as desired:+--+-- * 'sdfOperator'+--+-- * 'sdfMinComparisonValue'+--+-- * 'sdfMaxComparisonValue'+--+-- * 'sdfExpressions'+--+-- * 'sdfDimensionName'+--+-- * 'sdfCaseSensitive'+segmentDimensionFilter+    :: SegmentDimensionFilter+segmentDimensionFilter =+  SegmentDimensionFilter'+    { _sdfOperator = Nothing+    , _sdfMinComparisonValue = Nothing+    , _sdfMaxComparisonValue = Nothing+    , _sdfExpressions = Nothing+    , _sdfDimensionName = Nothing+    , _sdfCaseSensitive = Nothing+    }+++-- | The operator to use to match the dimension with the expressions.+sdfOperator :: Lens' SegmentDimensionFilter (Maybe SegmentDimensionFilterOperator)+sdfOperator+  = lens _sdfOperator (\ s a -> s{_sdfOperator = a})++-- | Minimum comparison values for \`BETWEEN\` match type.+sdfMinComparisonValue :: Lens' SegmentDimensionFilter (Maybe Text)+sdfMinComparisonValue+  = lens _sdfMinComparisonValue+      (\ s a -> s{_sdfMinComparisonValue = a})++-- | Maximum comparison values for \`BETWEEN\` match type.+sdfMaxComparisonValue :: Lens' SegmentDimensionFilter (Maybe Text)+sdfMaxComparisonValue+  = lens _sdfMaxComparisonValue+      (\ s a -> s{_sdfMaxComparisonValue = a})++-- | The list of expressions, only the first element is used for all+-- operators+sdfExpressions :: Lens' SegmentDimensionFilter [Text]+sdfExpressions+  = lens _sdfExpressions+      (\ s a -> s{_sdfExpressions = a})+      . _Default+      . _Coerce++-- | Name of the dimension for which the filter is being applied.+sdfDimensionName :: Lens' SegmentDimensionFilter (Maybe Text)+sdfDimensionName+  = lens _sdfDimensionName+      (\ s a -> s{_sdfDimensionName = a})++-- | Should the match be case sensitive, ignored for \`IN_LIST\` operator.+sdfCaseSensitive :: Lens' SegmentDimensionFilter (Maybe Bool)+sdfCaseSensitive+  = lens _sdfCaseSensitive+      (\ s a -> s{_sdfCaseSensitive = a})++instance FromJSON SegmentDimensionFilter where+        parseJSON+          = withObject "SegmentDimensionFilter"+              (\ o ->+                 SegmentDimensionFilter' <$>+                   (o .:? "operator") <*> (o .:? "minComparisonValue")+                     <*> (o .:? "maxComparisonValue")+                     <*> (o .:? "expressions" .!= mempty)+                     <*> (o .:? "dimensionName")+                     <*> (o .:? "caseSensitive"))++instance ToJSON SegmentDimensionFilter where+        toJSON SegmentDimensionFilter'{..}+          = object+              (catMaybes+                 [("operator" .=) <$> _sdfOperator,+                  ("minComparisonValue" .=) <$> _sdfMinComparisonValue,+                  ("maxComparisonValue" .=) <$> _sdfMaxComparisonValue,+                  ("expressions" .=) <$> _sdfExpressions,+                  ("dimensionName" .=) <$> _sdfDimensionName,+                  ("caseSensitive" .=) <$> _sdfCaseSensitive])++-- | Dynamic segment definition for defining the segment within the request.+-- A segment can select users, sessions or both.+--+-- /See:/ 'dynamicSegment' smart constructor.+data DynamicSegment =+  DynamicSegment'+    { _dsUserSegment    :: !(Maybe SegmentDefinition)+    , _dsName           :: !(Maybe Text)+    , _dsSessionSegment :: !(Maybe SegmentDefinition)+    }+  deriving (Eq, Show, Data, Typeable, Generic)+++-- | Creates a value of 'DynamicSegment' with the minimum fields required to make a request.+--+-- Use one of the following lenses to modify other fields as desired:+--+-- * 'dsUserSegment'+--+-- * 'dsName'+--+-- * 'dsSessionSegment'+dynamicSegment+    :: DynamicSegment+dynamicSegment =+  DynamicSegment'+    {_dsUserSegment = Nothing, _dsName = Nothing, _dsSessionSegment = Nothing}+++-- | User Segment to select users to include in the segment.+dsUserSegment :: Lens' DynamicSegment (Maybe SegmentDefinition)+dsUserSegment+  = lens _dsUserSegment+      (\ s a -> s{_dsUserSegment = a})++-- | The name of the dynamic segment.+dsName :: Lens' DynamicSegment (Maybe Text)+dsName = lens _dsName (\ s a -> s{_dsName = a})++-- | Session Segment to select sessions to include in the segment.+dsSessionSegment :: Lens' DynamicSegment (Maybe SegmentDefinition)+dsSessionSegment+  = lens _dsSessionSegment+      (\ s a -> s{_dsSessionSegment = a})++instance FromJSON DynamicSegment where+        parseJSON+          = withObject "DynamicSegment"+              (\ o ->+                 DynamicSegment' <$>+                   (o .:? "userSegment") <*> (o .:? "name") <*>+                     (o .:? "sessionSegment"))++instance ToJSON DynamicSegment where+        toJSON DynamicSegment'{..}+          = object+              (catMaybes+                 [("userSegment" .=) <$> _dsUserSegment,+                  ("name" .=) <$> _dsName,+                  ("sessionSegment" .=) <$> _dsSessionSegment])++-- | Represents a group of metric filters. Set the operator value to specify+-- how the filters are logically combined.+--+-- /See:/ 'metricFilterClause' smart constructor.+data MetricFilterClause =+  MetricFilterClause'+    { _mfcOperator :: !(Maybe MetricFilterClauseOperator)+    , _mfcFilters  :: !(Maybe [MetricFilter])+    }+  deriving (Eq, Show, Data, Typeable, Generic)+++-- | Creates a value of 'MetricFilterClause' with the minimum fields required to make a request.+--+-- Use one of the following lenses to modify other fields as desired:+--+-- * 'mfcOperator'+--+-- * 'mfcFilters'+metricFilterClause+    :: MetricFilterClause+metricFilterClause =+  MetricFilterClause' {_mfcOperator = Nothing, _mfcFilters = Nothing}+++-- | The operator for combining multiple metric filters. If unspecified, it+-- is treated as an \`OR\`.+mfcOperator :: Lens' MetricFilterClause (Maybe MetricFilterClauseOperator)+mfcOperator+  = lens _mfcOperator (\ s a -> s{_mfcOperator = a})++-- | The repeated set of filters. They are logically combined based on the+-- operator specified.+mfcFilters :: Lens' MetricFilterClause [MetricFilter]+mfcFilters+  = lens _mfcFilters (\ s a -> s{_mfcFilters = a}) .+      _Default+      . _Coerce++instance FromJSON MetricFilterClause where+        parseJSON+          = withObject "MetricFilterClause"+              (\ o ->+                 MetricFilterClause' <$>+                   (o .:? "operator") <*> (o .:? "filters" .!= mempty))++instance ToJSON MetricFilterClause where+        toJSON MetricFilterClause'{..}+          = object+              (catMaybes+                 [("operator" .=) <$> _mfcOperator,+                  ("filters" .=) <$> _mfcFilters])++-- | Column headers.+--+-- /See:/ 'columnHeader' smart constructor.+data ColumnHeader =+  ColumnHeader'+    { _chMetricHeader :: !(Maybe MetricHeader)+    , _chDimensions   :: !(Maybe [Text])+    }+  deriving (Eq, Show, Data, Typeable, Generic)+++-- | Creates a value of 'ColumnHeader' with the minimum fields required to make a request.+--+-- Use one of the following lenses to modify other fields as desired:+--+-- * 'chMetricHeader'+--+-- * 'chDimensions'+columnHeader+    :: ColumnHeader+columnHeader =+  ColumnHeader' {_chMetricHeader = Nothing, _chDimensions = Nothing}+++-- | Metric headers for the metrics in the response.+chMetricHeader :: Lens' ColumnHeader (Maybe MetricHeader)+chMetricHeader+  = lens _chMetricHeader+      (\ s a -> s{_chMetricHeader = a})++-- | The dimension names in the response.+chDimensions :: Lens' ColumnHeader [Text]+chDimensions+  = lens _chDimensions (\ s a -> s{_chDimensions = a})+      . _Default+      . _Coerce++instance FromJSON ColumnHeader where+        parseJSON+          = withObject "ColumnHeader"+              (\ o ->+                 ColumnHeader' <$>+                   (o .:? "metricHeader") <*>+                     (o .:? "dimensions" .!= mempty))++instance ToJSON ColumnHeader where+        toJSON ColumnHeader'{..}+          = object+              (catMaybes+                 [("metricHeader" .=) <$> _chMetricHeader,+                  ("dimensions" .=) <$> _chDimensions])++-- | The response from \`userActivity:get\` call.+--+-- /See:/ 'searchUserActivityResponse' smart constructor.+data SearchUserActivityResponse =+  SearchUserActivityResponse'+    { _suarNextPageToken :: !(Maybe Text)+    , _suarSampleRate    :: !(Maybe (Textual Double))+    , _suarSessions      :: !(Maybe [UserActivitySession])+    , _suarTotalRows     :: !(Maybe (Textual Int32))+    }+  deriving (Eq, Show, Data, Typeable, Generic)+++-- | Creates a value of 'SearchUserActivityResponse' with the minimum fields required to make a request.+--+-- Use one of the following lenses to modify other fields as desired:+--+-- * 'suarNextPageToken'+--+-- * 'suarSampleRate'+--+-- * 'suarSessions'+--+-- * 'suarTotalRows'+searchUserActivityResponse+    :: SearchUserActivityResponse+searchUserActivityResponse =+  SearchUserActivityResponse'+    { _suarNextPageToken = Nothing+    , _suarSampleRate = Nothing+    , _suarSessions = Nothing+    , _suarTotalRows = Nothing+    }+++-- | This token should be passed to+-- [SearchUserActivityRequest](#SearchUserActivityRequest) to retrieve the+-- next page.+suarNextPageToken :: Lens' SearchUserActivityResponse (Maybe Text)+suarNextPageToken+  = lens _suarNextPageToken+      (\ s a -> s{_suarNextPageToken = a})++-- | This field represents the [sampling+-- rate](https:\/\/support.google.com\/analytics\/answer\/2637192) for the+-- given request and is a number between 0.0 to 1.0. See [developer+-- guide](\/analytics\/devguides\/reporting\/core\/v4\/basics#sampling) for+-- details.+suarSampleRate :: Lens' SearchUserActivityResponse (Maybe Double)+suarSampleRate+  = lens _suarSampleRate+      (\ s a -> s{_suarSampleRate = a})+      . mapping _Coerce++-- | Each record represents a session (device details, duration, etc).+suarSessions :: Lens' SearchUserActivityResponse [UserActivitySession]+suarSessions+  = lens _suarSessions (\ s a -> s{_suarSessions = a})+      . _Default+      . _Coerce++-- | Total rows returned by this query (across different pages).+suarTotalRows :: Lens' SearchUserActivityResponse (Maybe Int32)+suarTotalRows+  = lens _suarTotalRows+      (\ s a -> s{_suarTotalRows = a})+      . mapping _Coerce++instance FromJSON SearchUserActivityResponse where+        parseJSON+          = withObject "SearchUserActivityResponse"+              (\ o ->+                 SearchUserActivityResponse' <$>+                   (o .:? "nextPageToken") <*> (o .:? "sampleRate") <*>+                     (o .:? "sessions" .!= mempty)+                     <*> (o .:? "totalRows"))++instance ToJSON SearchUserActivityResponse where+        toJSON SearchUserActivityResponse'{..}+          = object+              (catMaybes+                 [("nextPageToken" .=) <$> _suarNextPageToken,+                  ("sampleRate" .=) <$> _suarSampleRate,+                  ("sessions" .=) <$> _suarSessions,+                  ("totalRows" .=) <$> _suarTotalRows])++--+-- /See:/ 'screenviewData' smart constructor.+data ScreenviewData =+  ScreenviewData'+    { _sdMobileDeviceModel    :: !(Maybe Text)+    , _sdMobileDeviceBranding :: !(Maybe Text)+    , _sdAppName              :: !(Maybe Text)+    , _sdScreenName           :: !(Maybe Text)+    }+  deriving (Eq, Show, Data, Typeable, Generic)+++-- | Creates a value of 'ScreenviewData' with the minimum fields required to make a request.+--+-- Use one of the following lenses to modify other fields as desired:+--+-- * 'sdMobileDeviceModel'+--+-- * 'sdMobileDeviceBranding'+--+-- * 'sdAppName'+--+-- * 'sdScreenName'+screenviewData+    :: ScreenviewData+screenviewData =+  ScreenviewData'+    { _sdMobileDeviceModel = Nothing+    , _sdMobileDeviceBranding = Nothing+    , _sdAppName = Nothing+    , _sdScreenName = Nothing+    }+++-- | Mobile device model. Eg: \"Pixel\", \"iPhone\" etc.+sdMobileDeviceModel :: Lens' ScreenviewData (Maybe Text)+sdMobileDeviceModel+  = lens _sdMobileDeviceModel+      (\ s a -> s{_sdMobileDeviceModel = a})++-- | Mobile manufacturer or branded name. Eg: \"Google\", \"Apple\" etc.+sdMobileDeviceBranding :: Lens' ScreenviewData (Maybe Text)+sdMobileDeviceBranding+  = lens _sdMobileDeviceBranding+      (\ s a -> s{_sdMobileDeviceBranding = a})++-- | The application name.+sdAppName :: Lens' ScreenviewData (Maybe Text)+sdAppName+  = lens _sdAppName (\ s a -> s{_sdAppName = a})++-- | The name of the screen.+sdScreenName :: Lens' ScreenviewData (Maybe Text)+sdScreenName+  = lens _sdScreenName (\ s a -> s{_sdScreenName = a})++instance FromJSON ScreenviewData where+        parseJSON+          = withObject "ScreenviewData"+              (\ o ->+                 ScreenviewData' <$>+                   (o .:? "mobileDeviceModel") <*>+                     (o .:? "mobileDeviceBranding")+                     <*> (o .:? "appName")+                     <*> (o .:? "screenName"))++instance ToJSON ScreenviewData where+        toJSON ScreenviewData'{..}+          = object+              (catMaybes+                 [("mobileDeviceModel" .=) <$> _sdMobileDeviceModel,+                  ("mobileDeviceBranding" .=) <$>+                    _sdMobileDeviceBranding,+                  ("appName" .=) <$> _sdAppName,+                  ("screenName" .=) <$> _sdScreenName])
gen/Network/Google/AnalyticsReporting/Types/Sum.hs view
@@ -190,6 +190,70 @@ instance ToJSON OrderByOrderType where     toJSON = toJSONText +-- | Action associated with this e-commerce action.+data EcommerceDataActionType+    = Unknown+      -- ^ @UNKNOWN@+      -- Action type is not known.+    | Click+      -- ^ @CLICK@+      -- Click through of product lists.+    | DetailsView+      -- ^ @DETAILS_VIEW@+      -- Product detail views.+    | AddToCart+      -- ^ @ADD_TO_CART@+      -- Add product(s) to cart.+    | RemoveFromCart+      -- ^ @REMOVE_FROM_CART@+      -- Remove product(s) from cart.+    | Checkout+      -- ^ @CHECKOUT@+      -- Check out.+    | Payment+      -- ^ @PAYMENT@+      -- Completed purchase.+    | Refund+      -- ^ @REFUND@+      -- Refund of purchase.+    | CheckoutOption+      -- ^ @CHECKOUT_OPTION@+      -- Checkout options.+      deriving (Eq, Ord, Enum, Read, Show, Data, Typeable, Generic)++instance Hashable EcommerceDataActionType++instance FromHttpApiData EcommerceDataActionType where+    parseQueryParam = \case+        "UNKNOWN" -> Right Unknown+        "CLICK" -> Right Click+        "DETAILS_VIEW" -> Right DetailsView+        "ADD_TO_CART" -> Right AddToCart+        "REMOVE_FROM_CART" -> Right RemoveFromCart+        "CHECKOUT" -> Right Checkout+        "PAYMENT" -> Right Payment+        "REFUND" -> Right Refund+        "CHECKOUT_OPTION" -> Right CheckoutOption+        x -> Left ("Unable to parse EcommerceDataActionType from: " <> x)++instance ToHttpApiData EcommerceDataActionType where+    toQueryParam = \case+        Unknown -> "UNKNOWN"+        Click -> "CLICK"+        DetailsView -> "DETAILS_VIEW"+        AddToCart -> "ADD_TO_CART"+        RemoveFromCart -> "REMOVE_FROM_CART"+        Checkout -> "CHECKOUT"+        Payment -> "PAYMENT"+        Refund -> "REFUND"+        CheckoutOption -> "CHECKOUT_OPTION"++instance FromJSON EcommerceDataActionType where+    parseJSON = parseJSONText "EcommerceDataActionType"++instance ToJSON EcommerceDataActionType where+    toJSON = toJSONText+ -- | The sorting order for the field. data OrderBySortOrder     = SortOrderUnspecified@@ -437,21 +501,21 @@ -- scope as defined in the data model. The primary scope is defined by if -- the segment is selecting users or sessions. data SegmentMetricFilterScope-    = UnspecifiedScope+    = SMFSUnspecifiedScope       -- ^ @UNSPECIFIED_SCOPE@       -- If the scope is unspecified, it defaults to the condition scope,       -- \`USER\` or \`SESSION\` depending on if the segment is trying to choose       -- users or sessions.-    | Product+    | SMFSProduct       -- ^ @PRODUCT@       -- Product scope.-    | Hit+    | SMFSHit       -- ^ @HIT@       -- Hit scope.-    | Session+    | SMFSSession       -- ^ @SESSION@       -- Session scope.-    | User+    | SMFSUser       -- ^ @USER@       -- User scope.       deriving (Eq, Ord, Enum, Read, Show, Data, Typeable, Generic)@@ -460,20 +524,20 @@  instance FromHttpApiData SegmentMetricFilterScope where     parseQueryParam = \case-        "UNSPECIFIED_SCOPE" -> Right UnspecifiedScope-        "PRODUCT" -> Right Product-        "HIT" -> Right Hit-        "SESSION" -> Right Session-        "USER" -> Right User+        "UNSPECIFIED_SCOPE" -> Right SMFSUnspecifiedScope+        "PRODUCT" -> Right SMFSProduct+        "HIT" -> Right SMFSHit+        "SESSION" -> Right SMFSSession+        "USER" -> Right SMFSUser         x -> Left ("Unable to parse SegmentMetricFilterScope from: " <> x)  instance ToHttpApiData SegmentMetricFilterScope where     toQueryParam = \case-        UnspecifiedScope -> "UNSPECIFIED_SCOPE"-        Product -> "PRODUCT"-        Hit -> "HIT"-        Session -> "SESSION"-        User -> "USER"+        SMFSUnspecifiedScope -> "UNSPECIFIED_SCOPE"+        SMFSProduct -> "PRODUCT"+        SMFSHit -> "HIT"+        SMFSSession -> "SESSION"+        SMFSUser -> "USER"  instance FromJSON SegmentMetricFilterScope where     parseJSON = parseJSONText "SegmentMetricFilterScope"@@ -481,6 +545,40 @@ instance ToJSON SegmentMetricFilterScope where     toJSON = toJSONText +-- | The type of this e-commerce activity.+data EcommerceDataEcommerceType+    = EcommerceTypeUnspecified+      -- ^ @ECOMMERCE_TYPE_UNSPECIFIED@+      -- Used when the e-commerce activity type is unspecified.+    | Classic+      -- ^ @CLASSIC@+      -- Used when activity has classic (non-enhanced) e-commerce information.+    | Enhanced+      -- ^ @ENHANCED@+      -- Used when activity has enhanced e-commerce information.+      deriving (Eq, Ord, Enum, Read, Show, Data, Typeable, Generic)++instance Hashable EcommerceDataEcommerceType++instance FromHttpApiData EcommerceDataEcommerceType where+    parseQueryParam = \case+        "ECOMMERCE_TYPE_UNSPECIFIED" -> Right EcommerceTypeUnspecified+        "CLASSIC" -> Right Classic+        "ENHANCED" -> Right Enhanced+        x -> Left ("Unable to parse EcommerceDataEcommerceType from: " <> x)++instance ToHttpApiData EcommerceDataEcommerceType where+    toQueryParam = \case+        EcommerceTypeUnspecified -> "ECOMMERCE_TYPE_UNSPECIFIED"+        Classic -> "CLASSIC"+        Enhanced -> "ENHANCED"++instance FromJSON EcommerceDataEcommerceType where+    parseJSON = parseJSONText "EcommerceDataEcommerceType"++instance ToJSON EcommerceDataEcommerceType where+    toJSON = toJSONText+ -- | How to match the dimension to the expression. The default is REGEXP. data DimensionFilterOperator     = DFOOperatorUnspecified@@ -563,6 +661,57 @@ instance ToJSON DimensionFilterOperator where     toJSON = toJSONText +-- | Type of this activity.+data ActivityActivityType+    = ActivityTypeUnspecified+      -- ^ @ACTIVITY_TYPE_UNSPECIFIED@+      -- ActivityType will never have this value in the response. Using this type+      -- in the request will result in an error.+    | Pageview+      -- ^ @PAGEVIEW@+      -- Used when the activity resulted out of a visitor viewing a page.+    | Screenview+      -- ^ @SCREENVIEW@+      -- Used when the activity resulted out of a visitor using an application on+      -- a mobile device.+    | Goal+      -- ^ @GOAL@+      -- Used to denote that a goal type activity.+    | Ecommerce+      -- ^ @ECOMMERCE@+      -- An e-commerce transaction was performed by the visitor on the page.+    | Event+      -- ^ @EVENT@+      -- Used when the activity is an event.+      deriving (Eq, Ord, Enum, Read, Show, Data, Typeable, Generic)++instance Hashable ActivityActivityType++instance FromHttpApiData ActivityActivityType where+    parseQueryParam = \case+        "ACTIVITY_TYPE_UNSPECIFIED" -> Right ActivityTypeUnspecified+        "PAGEVIEW" -> Right Pageview+        "SCREENVIEW" -> Right Screenview+        "GOAL" -> Right Goal+        "ECOMMERCE" -> Right Ecommerce+        "EVENT" -> Right Event+        x -> Left ("Unable to parse ActivityActivityType from: " <> x)++instance ToHttpApiData ActivityActivityType where+    toQueryParam = \case+        ActivityTypeUnspecified -> "ACTIVITY_TYPE_UNSPECIFIED"+        Pageview -> "PAGEVIEW"+        Screenview -> "SCREENVIEW"+        Goal -> "GOAL"+        Ecommerce -> "ECOMMERCE"+        Event -> "EVENT"++instance FromJSON ActivityActivityType where+    parseJSON = parseJSONText "ActivityActivityType"++instance ToJSON ActivityActivityType where+    toJSON = toJSONText+ -- | Specifies how the metric expression should be formatted, for example -- \`INTEGER\`. data MetricFormattingType@@ -728,4 +877,41 @@     parseJSON = parseJSONText "MetricFilterClauseOperator"  instance ToJSON MetricFilterClauseOperator where+    toJSON = toJSONText++-- | Type of the user in the request. The field \`userId\` is associated with+-- this type.+data UserType+    = UserIdTypeUnspecified+      -- ^ @USER_ID_TYPE_UNSPECIFIED@+      -- When the User Id Type is not specified, the default type used will be+      -- CLIENT_ID.+    | UserIdTypeUserId+      -- ^ @USER_ID_TYPE_USER_ID@+      -- A single user, like a signed-in user account, that may interact with+      -- content across one or more devices and \/ or browser instances.+    | UserIdTypeClientId+      -- ^ @USER_ID_TYPE_CLIENT_ID@+      -- Analytics assigned client_id.+      deriving (Eq, Ord, Enum, Read, Show, Data, Typeable, Generic)++instance Hashable UserType++instance FromHttpApiData UserType where+    parseQueryParam = \case+        "USER_ID_TYPE_UNSPECIFIED" -> Right UserIdTypeUnspecified+        "USER_ID_TYPE_USER_ID" -> Right UserIdTypeUserId+        "USER_ID_TYPE_CLIENT_ID" -> Right UserIdTypeClientId+        x -> Left ("Unable to parse UserType from: " <> x)++instance ToHttpApiData UserType where+    toQueryParam = \case+        UserIdTypeUnspecified -> "USER_ID_TYPE_UNSPECIFIED"+        UserIdTypeUserId -> "USER_ID_TYPE_USER_ID"+        UserIdTypeClientId -> "USER_ID_TYPE_CLIENT_ID"++instance FromJSON UserType where+    parseJSON = parseJSONText "UserType"++instance ToJSON UserType where     toJSON = toJSONText
gen/Network/Google/Resource/AnalyticsReporting/Reports/BatchGet.hs view
@@ -61,15 +61,18 @@ -- | Returns the Analytics data. -- -- /See:/ 'reportsBatchGet' smart constructor.-data ReportsBatchGet = ReportsBatchGet'+data ReportsBatchGet =+  ReportsBatchGet'     { _rbgXgafv          :: !(Maybe Xgafv)     , _rbgUploadProtocol :: !(Maybe Text)     , _rbgAccessToken    :: !(Maybe Text)     , _rbgUploadType     :: !(Maybe Text)     , _rbgPayload        :: !GetReportsRequest     , _rbgCallback       :: !(Maybe Text)-    } deriving (Eq,Show,Data,Typeable,Generic)+    }+  deriving (Eq, Show, Data, Typeable, Generic) + -- | Creates a value of 'ReportsBatchGet' with the minimum fields required to make a request. -- -- Use one of the following lenses to modify other fields as desired:@@ -89,7 +92,7 @@     :: GetReportsRequest -- ^ 'rbgPayload'     -> ReportsBatchGet reportsBatchGet pRbgPayload_ =-    ReportsBatchGet'+  ReportsBatchGet'     { _rbgXgafv = Nothing     , _rbgUploadProtocol = Nothing     , _rbgAccessToken = Nothing@@ -97,6 +100,7 @@     , _rbgPayload = pRbgPayload_     , _rbgCallback = Nothing     }+  -- | V1 error format. rbgXgafv :: Lens' ReportsBatchGet (Maybe Xgafv)
+ gen/Network/Google/Resource/AnalyticsReporting/UserActivity/Search.hs view
@@ -0,0 +1,153 @@+{-# LANGUAGE DataKinds          #-}+{-# LANGUAGE DeriveDataTypeable #-}+{-# LANGUAGE DeriveGeneric      #-}+{-# LANGUAGE FlexibleInstances  #-}+{-# LANGUAGE NoImplicitPrelude  #-}+{-# LANGUAGE OverloadedStrings  #-}+{-# LANGUAGE RecordWildCards    #-}+{-# LANGUAGE TypeFamilies       #-}+{-# LANGUAGE TypeOperators      #-}++{-# OPTIONS_GHC -fno-warn-duplicate-exports #-}+{-# OPTIONS_GHC -fno-warn-unused-binds      #-}+{-# OPTIONS_GHC -fno-warn-unused-imports    #-}++-- |+-- Module      : Network.Google.Resource.AnalyticsReporting.UserActivity.Search+-- Copyright   : (c) 2015-2016 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)+--+-- Returns User Activity data.+--+-- /See:/ <https://developers.google.com/analytics/devguides/reporting/core/v4/ Analytics Reporting API Reference> for @analyticsreporting.userActivity.search@.+module Network.Google.Resource.AnalyticsReporting.UserActivity.Search+    (+    -- * REST Resource+      UserActivitySearchResource++    -- * Creating a Request+    , userActivitySearch+    , UserActivitySearch++    -- * Request Lenses+    , uasXgafv+    , uasUploadProtocol+    , uasAccessToken+    , uasUploadType+    , uasPayload+    , uasCallback+    ) where++import           Network.Google.AnalyticsReporting.Types+import           Network.Google.Prelude++-- | A resource alias for @analyticsreporting.userActivity.search@ method which the+-- 'UserActivitySearch' request conforms to.+type UserActivitySearchResource =+     "v4" :>+       "userActivity:search" :>+         QueryParam "$.xgafv" Xgafv :>+           QueryParam "upload_protocol" Text :>+             QueryParam "access_token" Text :>+               QueryParam "uploadType" Text :>+                 QueryParam "callback" Text :>+                   QueryParam "alt" AltJSON :>+                     ReqBody '[JSON] SearchUserActivityRequest :>+                       Post '[JSON] SearchUserActivityResponse++-- | Returns User Activity data.+--+-- /See:/ 'userActivitySearch' smart constructor.+data UserActivitySearch =+  UserActivitySearch'+    { _uasXgafv          :: !(Maybe Xgafv)+    , _uasUploadProtocol :: !(Maybe Text)+    , _uasAccessToken    :: !(Maybe Text)+    , _uasUploadType     :: !(Maybe Text)+    , _uasPayload        :: !SearchUserActivityRequest+    , _uasCallback       :: !(Maybe Text)+    }+  deriving (Eq, Show, Data, Typeable, Generic)+++-- | Creates a value of 'UserActivitySearch' with the minimum fields required to make a request.+--+-- Use one of the following lenses to modify other fields as desired:+--+-- * 'uasXgafv'+--+-- * 'uasUploadProtocol'+--+-- * 'uasAccessToken'+--+-- * 'uasUploadType'+--+-- * 'uasPayload'+--+-- * 'uasCallback'+userActivitySearch+    :: SearchUserActivityRequest -- ^ 'uasPayload'+    -> UserActivitySearch+userActivitySearch pUasPayload_ =+  UserActivitySearch'+    { _uasXgafv = Nothing+    , _uasUploadProtocol = Nothing+    , _uasAccessToken = Nothing+    , _uasUploadType = Nothing+    , _uasPayload = pUasPayload_+    , _uasCallback = Nothing+    }+++-- | V1 error format.+uasXgafv :: Lens' UserActivitySearch (Maybe Xgafv)+uasXgafv = lens _uasXgafv (\ s a -> s{_uasXgafv = a})++-- | Upload protocol for media (e.g. \"raw\", \"multipart\").+uasUploadProtocol :: Lens' UserActivitySearch (Maybe Text)+uasUploadProtocol+  = lens _uasUploadProtocol+      (\ s a -> s{_uasUploadProtocol = a})++-- | OAuth access token.+uasAccessToken :: Lens' UserActivitySearch (Maybe Text)+uasAccessToken+  = lens _uasAccessToken+      (\ s a -> s{_uasAccessToken = a})++-- | Legacy upload protocol for media (e.g. \"media\", \"multipart\").+uasUploadType :: Lens' UserActivitySearch (Maybe Text)+uasUploadType+  = lens _uasUploadType+      (\ s a -> s{_uasUploadType = a})++-- | Multipart request metadata.+uasPayload :: Lens' UserActivitySearch SearchUserActivityRequest+uasPayload+  = lens _uasPayload (\ s a -> s{_uasPayload = a})++-- | JSONP+uasCallback :: Lens' UserActivitySearch (Maybe Text)+uasCallback+  = lens _uasCallback (\ s a -> s{_uasCallback = a})++instance GoogleRequest UserActivitySearch where+        type Rs UserActivitySearch =+             SearchUserActivityResponse+        type Scopes UserActivitySearch =+             '["https://www.googleapis.com/auth/analytics",+               "https://www.googleapis.com/auth/analytics.readonly"]+        requestClient UserActivitySearch'{..}+          = go _uasXgafv _uasUploadProtocol _uasAccessToken+              _uasUploadType+              _uasCallback+              (Just AltJSON)+              _uasPayload+              analyticsReportingService+          where go+                  = buildClient+                      (Proxy :: Proxy UserActivitySearchResource)+                      mempty
gogol-analyticsreporting.cabal view
@@ -1,5 +1,5 @@ name:                  gogol-analyticsreporting-version:               0.4.0+version:               0.5.0 synopsis:              Google Analytics Reporting SDK. homepage:              https://github.com/brendanhay/gogol bug-reports:           https://github.com/brendanhay/gogol/issues@@ -36,11 +36,12 @@           Network.Google.AnalyticsReporting         , Network.Google.AnalyticsReporting.Types         , Network.Google.Resource.AnalyticsReporting.Reports.BatchGet+        , Network.Google.Resource.AnalyticsReporting.UserActivity.Search      other-modules:           Network.Google.AnalyticsReporting.Types.Product         , Network.Google.AnalyticsReporting.Types.Sum      build-depends:-          gogol-core == 0.4.0.*+          gogol-core == 0.5.0.*         , base       >= 4.7 && < 5