{-# OPTIONS_GHC -fno-warn-duplicate-exports #-}
{-# OPTIONS_GHC -fno-warn-unused-imports #-}

-- |
-- Module      : Amazonka.Evidently
-- Copyright   : (c) 2013-2023 Brendan Hay
-- License     : Mozilla Public License, v. 2.0.
-- Maintainer  : Brendan Hay
-- Stability   : auto-generated
-- Portability : non-portable (GHC extensions)
--
-- Derived from API version @2021-02-01@ of the AWS service descriptions, licensed under Apache 2.0.
--
-- You can use Amazon CloudWatch Evidently to safely validate new features
-- by serving them to a specified percentage of your users while you roll
-- out the feature. You can monitor the performance of the new feature to
-- help you decide when to ramp up traffic to your users. This helps you
-- reduce risk and identify unintended consequences before you fully launch
-- the feature.
--
-- You can also conduct A\/B experiments to make feature design decisions
-- based on evidence and data. An experiment can test as many as five
-- variations at once. Evidently collects experiment data and analyzes it
-- using statistical methods. It also provides clear recommendations about
-- which variations perform better. You can test both user-facing features
-- and backend features.
module Amazonka.Evidently
  ( -- * Service Configuration
    defaultService,

    -- * Errors
    -- $errors

    -- ** AccessDeniedException
    _AccessDeniedException,

    -- ** ConflictException
    _ConflictException,

    -- ** InternalServerException
    _InternalServerException,

    -- ** ResourceNotFoundException
    _ResourceNotFoundException,

    -- ** ServiceQuotaExceededException
    _ServiceQuotaExceededException,

    -- ** ServiceUnavailableException
    _ServiceUnavailableException,

    -- ** ThrottlingException
    _ThrottlingException,

    -- ** ValidationException
    _ValidationException,

    -- * Waiters
    -- $waiters

    -- * Operations
    -- $operations

    -- ** BatchEvaluateFeature
    BatchEvaluateFeature (BatchEvaluateFeature'),
    newBatchEvaluateFeature,
    BatchEvaluateFeatureResponse (BatchEvaluateFeatureResponse'),
    newBatchEvaluateFeatureResponse,

    -- ** CreateExperiment
    CreateExperiment (CreateExperiment'),
    newCreateExperiment,
    CreateExperimentResponse (CreateExperimentResponse'),
    newCreateExperimentResponse,

    -- ** CreateFeature
    CreateFeature (CreateFeature'),
    newCreateFeature,
    CreateFeatureResponse (CreateFeatureResponse'),
    newCreateFeatureResponse,

    -- ** CreateLaunch
    CreateLaunch (CreateLaunch'),
    newCreateLaunch,
    CreateLaunchResponse (CreateLaunchResponse'),
    newCreateLaunchResponse,

    -- ** CreateProject
    CreateProject (CreateProject'),
    newCreateProject,
    CreateProjectResponse (CreateProjectResponse'),
    newCreateProjectResponse,

    -- ** CreateSegment
    CreateSegment (CreateSegment'),
    newCreateSegment,
    CreateSegmentResponse (CreateSegmentResponse'),
    newCreateSegmentResponse,

    -- ** DeleteExperiment
    DeleteExperiment (DeleteExperiment'),
    newDeleteExperiment,
    DeleteExperimentResponse (DeleteExperimentResponse'),
    newDeleteExperimentResponse,

    -- ** DeleteFeature
    DeleteFeature (DeleteFeature'),
    newDeleteFeature,
    DeleteFeatureResponse (DeleteFeatureResponse'),
    newDeleteFeatureResponse,

    -- ** DeleteLaunch
    DeleteLaunch (DeleteLaunch'),
    newDeleteLaunch,
    DeleteLaunchResponse (DeleteLaunchResponse'),
    newDeleteLaunchResponse,

    -- ** DeleteProject
    DeleteProject (DeleteProject'),
    newDeleteProject,
    DeleteProjectResponse (DeleteProjectResponse'),
    newDeleteProjectResponse,

    -- ** DeleteSegment
    DeleteSegment (DeleteSegment'),
    newDeleteSegment,
    DeleteSegmentResponse (DeleteSegmentResponse'),
    newDeleteSegmentResponse,

    -- ** EvaluateFeature
    EvaluateFeature (EvaluateFeature'),
    newEvaluateFeature,
    EvaluateFeatureResponse (EvaluateFeatureResponse'),
    newEvaluateFeatureResponse,

    -- ** GetExperiment
    GetExperiment (GetExperiment'),
    newGetExperiment,
    GetExperimentResponse (GetExperimentResponse'),
    newGetExperimentResponse,

    -- ** GetExperimentResults
    GetExperimentResults (GetExperimentResults'),
    newGetExperimentResults,
    GetExperimentResultsResponse (GetExperimentResultsResponse'),
    newGetExperimentResultsResponse,

    -- ** GetFeature
    GetFeature (GetFeature'),
    newGetFeature,
    GetFeatureResponse (GetFeatureResponse'),
    newGetFeatureResponse,

    -- ** GetLaunch
    GetLaunch (GetLaunch'),
    newGetLaunch,
    GetLaunchResponse (GetLaunchResponse'),
    newGetLaunchResponse,

    -- ** GetProject
    GetProject (GetProject'),
    newGetProject,
    GetProjectResponse (GetProjectResponse'),
    newGetProjectResponse,

    -- ** GetSegment
    GetSegment (GetSegment'),
    newGetSegment,
    GetSegmentResponse (GetSegmentResponse'),
    newGetSegmentResponse,

    -- ** ListExperiments (Paginated)
    ListExperiments (ListExperiments'),
    newListExperiments,
    ListExperimentsResponse (ListExperimentsResponse'),
    newListExperimentsResponse,

    -- ** ListFeatures (Paginated)
    ListFeatures (ListFeatures'),
    newListFeatures,
    ListFeaturesResponse (ListFeaturesResponse'),
    newListFeaturesResponse,

    -- ** ListLaunches (Paginated)
    ListLaunches (ListLaunches'),
    newListLaunches,
    ListLaunchesResponse (ListLaunchesResponse'),
    newListLaunchesResponse,

    -- ** ListProjects (Paginated)
    ListProjects (ListProjects'),
    newListProjects,
    ListProjectsResponse (ListProjectsResponse'),
    newListProjectsResponse,

    -- ** ListSegmentReferences (Paginated)
    ListSegmentReferences (ListSegmentReferences'),
    newListSegmentReferences,
    ListSegmentReferencesResponse (ListSegmentReferencesResponse'),
    newListSegmentReferencesResponse,

    -- ** ListSegments (Paginated)
    ListSegments (ListSegments'),
    newListSegments,
    ListSegmentsResponse (ListSegmentsResponse'),
    newListSegmentsResponse,

    -- ** ListTagsForResource
    ListTagsForResource (ListTagsForResource'),
    newListTagsForResource,
    ListTagsForResourceResponse (ListTagsForResourceResponse'),
    newListTagsForResourceResponse,

    -- ** PutProjectEvents
    PutProjectEvents (PutProjectEvents'),
    newPutProjectEvents,
    PutProjectEventsResponse (PutProjectEventsResponse'),
    newPutProjectEventsResponse,

    -- ** StartExperiment
    StartExperiment (StartExperiment'),
    newStartExperiment,
    StartExperimentResponse (StartExperimentResponse'),
    newStartExperimentResponse,

    -- ** StartLaunch
    StartLaunch (StartLaunch'),
    newStartLaunch,
    StartLaunchResponse (StartLaunchResponse'),
    newStartLaunchResponse,

    -- ** StopExperiment
    StopExperiment (StopExperiment'),
    newStopExperiment,
    StopExperimentResponse (StopExperimentResponse'),
    newStopExperimentResponse,

    -- ** StopLaunch
    StopLaunch (StopLaunch'),
    newStopLaunch,
    StopLaunchResponse (StopLaunchResponse'),
    newStopLaunchResponse,

    -- ** TagResource
    TagResource (TagResource'),
    newTagResource,
    TagResourceResponse (TagResourceResponse'),
    newTagResourceResponse,

    -- ** TestSegmentPattern
    TestSegmentPattern (TestSegmentPattern'),
    newTestSegmentPattern,
    TestSegmentPatternResponse (TestSegmentPatternResponse'),
    newTestSegmentPatternResponse,

    -- ** UntagResource
    UntagResource (UntagResource'),
    newUntagResource,
    UntagResourceResponse (UntagResourceResponse'),
    newUntagResourceResponse,

    -- ** UpdateExperiment
    UpdateExperiment (UpdateExperiment'),
    newUpdateExperiment,
    UpdateExperimentResponse (UpdateExperimentResponse'),
    newUpdateExperimentResponse,

    -- ** UpdateFeature
    UpdateFeature (UpdateFeature'),
    newUpdateFeature,
    UpdateFeatureResponse (UpdateFeatureResponse'),
    newUpdateFeatureResponse,

    -- ** UpdateLaunch
    UpdateLaunch (UpdateLaunch'),
    newUpdateLaunch,
    UpdateLaunchResponse (UpdateLaunchResponse'),
    newUpdateLaunchResponse,

    -- ** UpdateProject
    UpdateProject (UpdateProject'),
    newUpdateProject,
    UpdateProjectResponse (UpdateProjectResponse'),
    newUpdateProjectResponse,

    -- ** UpdateProjectDataDelivery
    UpdateProjectDataDelivery (UpdateProjectDataDelivery'),
    newUpdateProjectDataDelivery,
    UpdateProjectDataDeliveryResponse (UpdateProjectDataDeliveryResponse'),
    newUpdateProjectDataDeliveryResponse,

    -- * Types

    -- ** ChangeDirectionEnum
    ChangeDirectionEnum (..),

    -- ** EventType
    EventType (..),

    -- ** ExperimentBaseStat
    ExperimentBaseStat (..),

    -- ** ExperimentReportName
    ExperimentReportName (..),

    -- ** ExperimentResultRequestType
    ExperimentResultRequestType (..),

    -- ** ExperimentResultResponseType
    ExperimentResultResponseType (..),

    -- ** ExperimentStatus
    ExperimentStatus (..),

    -- ** ExperimentStopDesiredState
    ExperimentStopDesiredState (..),

    -- ** ExperimentType
    ExperimentType (..),

    -- ** FeatureEvaluationStrategy
    FeatureEvaluationStrategy (..),

    -- ** FeatureStatus
    FeatureStatus (..),

    -- ** LaunchStatus
    LaunchStatus (..),

    -- ** LaunchStopDesiredState
    LaunchStopDesiredState (..),

    -- ** LaunchType
    LaunchType (..),

    -- ** ProjectStatus
    ProjectStatus (..),

    -- ** SegmentReferenceResourceType
    SegmentReferenceResourceType (..),

    -- ** VariationValueType
    VariationValueType (..),

    -- ** CloudWatchLogsDestination
    CloudWatchLogsDestination (CloudWatchLogsDestination'),
    newCloudWatchLogsDestination,

    -- ** CloudWatchLogsDestinationConfig
    CloudWatchLogsDestinationConfig (CloudWatchLogsDestinationConfig'),
    newCloudWatchLogsDestinationConfig,

    -- ** EvaluationRequest
    EvaluationRequest (EvaluationRequest'),
    newEvaluationRequest,

    -- ** EvaluationResult
    EvaluationResult (EvaluationResult'),
    newEvaluationResult,

    -- ** EvaluationRule
    EvaluationRule (EvaluationRule'),
    newEvaluationRule,

    -- ** Event
    Event (Event'),
    newEvent,

    -- ** Experiment
    Experiment (Experiment'),
    newExperiment,

    -- ** ExperimentExecution
    ExperimentExecution (ExperimentExecution'),
    newExperimentExecution,

    -- ** ExperimentReport
    ExperimentReport (ExperimentReport'),
    newExperimentReport,

    -- ** ExperimentResultsData
    ExperimentResultsData (ExperimentResultsData'),
    newExperimentResultsData,

    -- ** ExperimentSchedule
    ExperimentSchedule (ExperimentSchedule'),
    newExperimentSchedule,

    -- ** Feature
    Feature (Feature'),
    newFeature,

    -- ** FeatureSummary
    FeatureSummary (FeatureSummary'),
    newFeatureSummary,

    -- ** Launch
    Launch (Launch'),
    newLaunch,

    -- ** LaunchExecution
    LaunchExecution (LaunchExecution'),
    newLaunchExecution,

    -- ** LaunchGroup
    LaunchGroup (LaunchGroup'),
    newLaunchGroup,

    -- ** LaunchGroupConfig
    LaunchGroupConfig (LaunchGroupConfig'),
    newLaunchGroupConfig,

    -- ** MetricDefinition
    MetricDefinition (MetricDefinition'),
    newMetricDefinition,

    -- ** MetricDefinitionConfig
    MetricDefinitionConfig (MetricDefinitionConfig'),
    newMetricDefinitionConfig,

    -- ** MetricGoal
    MetricGoal (MetricGoal'),
    newMetricGoal,

    -- ** MetricGoalConfig
    MetricGoalConfig (MetricGoalConfig'),
    newMetricGoalConfig,

    -- ** MetricMonitor
    MetricMonitor (MetricMonitor'),
    newMetricMonitor,

    -- ** MetricMonitorConfig
    MetricMonitorConfig (MetricMonitorConfig'),
    newMetricMonitorConfig,

    -- ** OnlineAbConfig
    OnlineAbConfig (OnlineAbConfig'),
    newOnlineAbConfig,

    -- ** OnlineAbDefinition
    OnlineAbDefinition (OnlineAbDefinition'),
    newOnlineAbDefinition,

    -- ** Project
    Project (Project'),
    newProject,

    -- ** ProjectAppConfigResource
    ProjectAppConfigResource (ProjectAppConfigResource'),
    newProjectAppConfigResource,

    -- ** ProjectAppConfigResourceConfig
    ProjectAppConfigResourceConfig (ProjectAppConfigResourceConfig'),
    newProjectAppConfigResourceConfig,

    -- ** ProjectDataDelivery
    ProjectDataDelivery (ProjectDataDelivery'),
    newProjectDataDelivery,

    -- ** ProjectDataDeliveryConfig
    ProjectDataDeliveryConfig (ProjectDataDeliveryConfig'),
    newProjectDataDeliveryConfig,

    -- ** ProjectSummary
    ProjectSummary (ProjectSummary'),
    newProjectSummary,

    -- ** PutProjectEventsResultEntry
    PutProjectEventsResultEntry (PutProjectEventsResultEntry'),
    newPutProjectEventsResultEntry,

    -- ** RefResource
    RefResource (RefResource'),
    newRefResource,

    -- ** S3Destination
    S3Destination (S3Destination'),
    newS3Destination,

    -- ** S3DestinationConfig
    S3DestinationConfig (S3DestinationConfig'),
    newS3DestinationConfig,

    -- ** ScheduledSplit
    ScheduledSplit (ScheduledSplit'),
    newScheduledSplit,

    -- ** ScheduledSplitConfig
    ScheduledSplitConfig (ScheduledSplitConfig'),
    newScheduledSplitConfig,

    -- ** ScheduledSplitsLaunchConfig
    ScheduledSplitsLaunchConfig (ScheduledSplitsLaunchConfig'),
    newScheduledSplitsLaunchConfig,

    -- ** ScheduledSplitsLaunchDefinition
    ScheduledSplitsLaunchDefinition (ScheduledSplitsLaunchDefinition'),
    newScheduledSplitsLaunchDefinition,

    -- ** Segment
    Segment (Segment'),
    newSegment,

    -- ** SegmentOverride
    SegmentOverride (SegmentOverride'),
    newSegmentOverride,

    -- ** Treatment
    Treatment (Treatment'),
    newTreatment,

    -- ** TreatmentConfig
    TreatmentConfig (TreatmentConfig'),
    newTreatmentConfig,

    -- ** VariableValue
    VariableValue (VariableValue'),
    newVariableValue,

    -- ** Variation
    Variation (Variation'),
    newVariation,

    -- ** VariationConfig
    VariationConfig (VariationConfig'),
    newVariationConfig,
  )
where

import Amazonka.Evidently.BatchEvaluateFeature
import Amazonka.Evidently.CreateExperiment
import Amazonka.Evidently.CreateFeature
import Amazonka.Evidently.CreateLaunch
import Amazonka.Evidently.CreateProject
import Amazonka.Evidently.CreateSegment
import Amazonka.Evidently.DeleteExperiment
import Amazonka.Evidently.DeleteFeature
import Amazonka.Evidently.DeleteLaunch
import Amazonka.Evidently.DeleteProject
import Amazonka.Evidently.DeleteSegment
import Amazonka.Evidently.EvaluateFeature
import Amazonka.Evidently.GetExperiment
import Amazonka.Evidently.GetExperimentResults
import Amazonka.Evidently.GetFeature
import Amazonka.Evidently.GetLaunch
import Amazonka.Evidently.GetProject
import Amazonka.Evidently.GetSegment
import Amazonka.Evidently.Lens
import Amazonka.Evidently.ListExperiments
import Amazonka.Evidently.ListFeatures
import Amazonka.Evidently.ListLaunches
import Amazonka.Evidently.ListProjects
import Amazonka.Evidently.ListSegmentReferences
import Amazonka.Evidently.ListSegments
import Amazonka.Evidently.ListTagsForResource
import Amazonka.Evidently.PutProjectEvents
import Amazonka.Evidently.StartExperiment
import Amazonka.Evidently.StartLaunch
import Amazonka.Evidently.StopExperiment
import Amazonka.Evidently.StopLaunch
import Amazonka.Evidently.TagResource
import Amazonka.Evidently.TestSegmentPattern
import Amazonka.Evidently.Types
import Amazonka.Evidently.UntagResource
import Amazonka.Evidently.UpdateExperiment
import Amazonka.Evidently.UpdateFeature
import Amazonka.Evidently.UpdateLaunch
import Amazonka.Evidently.UpdateProject
import Amazonka.Evidently.UpdateProjectDataDelivery
import Amazonka.Evidently.Waiters

-- $errors
-- Error matchers are designed for use with the functions provided by
-- <http://hackage.haskell.org/package/lens/docs/Control-Exception-Lens.html Control.Exception.Lens>.
-- This allows catching (and rethrowing) service specific errors returned
-- by 'Evidently'.

-- $operations
-- Some AWS operations return results that are incomplete and require subsequent
-- requests in order to obtain the entire result set. The process of sending
-- subsequent requests to continue where a previous request left off is called
-- pagination. For example, the 'ListObjects' operation of Amazon S3 returns up to
-- 1000 objects at a time, and you must send subsequent requests with the
-- appropriate Marker in order to retrieve the next page of results.
--
-- Operations that have an 'AWSPager' instance can transparently perform subsequent
-- requests, correctly setting Markers and other request facets to iterate through
-- the entire result set of a truncated API operation. Operations which support
-- this have an additional note in the documentation.
--
-- Many operations have the ability to filter results on the server side. See the
-- individual operation parameters for details.

-- $waiters
-- Waiters poll by repeatedly sending a request until some remote success condition
-- configured by the 'Wait' specification is fulfilled. The 'Wait' specification
-- determines how many attempts should be made, in addition to delay and retry strategies.