content: {-# LANGUAGE DeriveGeneric #-}
  {-# LANGUAGE DeriveDataTypeable #-}
  module Distribution.Solver.Types.OptionalStanza
      ( OptionalStanza(..)
      , showStanza
      , enableStanzas
      ) where
  
  import GHC.Generics (Generic)
  import Data.Typeable
  import Distribution.Compat.Binary (Binary(..))
  import Distribution.Types.ComponentRequestedSpec
              (ComponentRequestedSpec(..), defaultComponentRequestedSpec)
  import Data.List (foldl')
  
  data OptionalStanza
      = TestStanzas
      | BenchStanzas
    deriving (Eq, Ord, Enum, Bounded, Show, Generic, Typeable)
  
  -- | String representation of an OptionalStanza.
  showStanza :: OptionalStanza -> String
  showStanza TestStanzas  = "test"
  showStanza BenchStanzas = "bench"
  
  -- | Convert a list of 'OptionalStanza' into the corresponding
  -- 'ComponentRequestedSpec' which records what components are enabled.
  enableStanzas :: [OptionalStanza] -> ComponentRequestedSpec
  enableStanzas = foldl' addStanza defaultComponentRequestedSpec
    where
      addStanza enabled TestStanzas  = enabled { testsRequested = True }
      addStanza enabled BenchStanzas = enabled { benchmarksRequested = True }
  
  instance Binary OptionalStanza
  