{-# LANGUAGE DeriveDataTypeable #-}
{-# LANGUAGE DeriveGeneric #-}
module Distribution.Types.ConfVar (
    ConfVar(..),
    ) where

import Prelude ()
import Distribution.Compat.Prelude

import Distribution.Types.Flag
import Distribution.Types.VersionRange
import Distribution.Compiler
import Distribution.System

-- | A @ConfVar@ represents the variable type used.
data ConfVar = OS OS
             | Arch Arch
             | PackageFlag FlagName
             | Impl CompilerFlavor VersionRange
    deriving (ConfVar -> ConfVar -> Bool
(ConfVar -> ConfVar -> Bool)
-> (ConfVar -> ConfVar -> Bool) -> Eq ConfVar
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: ConfVar -> ConfVar -> Bool
== :: ConfVar -> ConfVar -> Bool
$c/= :: ConfVar -> ConfVar -> Bool
/= :: ConfVar -> ConfVar -> Bool
Eq, Int -> ConfVar -> ShowS
[ConfVar] -> ShowS
ConfVar -> String
(Int -> ConfVar -> ShowS)
-> (ConfVar -> String) -> ([ConfVar] -> ShowS) -> Show ConfVar
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> ConfVar -> ShowS
showsPrec :: Int -> ConfVar -> ShowS
$cshow :: ConfVar -> String
show :: ConfVar -> String
$cshowList :: [ConfVar] -> ShowS
showList :: [ConfVar] -> ShowS
Show, Typeable, Typeable ConfVar
Typeable ConfVar
-> (forall (c :: * -> *).
    (forall d b. Data d => c (d -> b) -> d -> c b)
    -> (forall g. g -> c g) -> ConfVar -> c ConfVar)
-> (forall (c :: * -> *).
    (forall b r. Data b => c (b -> r) -> c r)
    -> (forall r. r -> c r) -> Constr -> c ConfVar)
-> (ConfVar -> Constr)
-> (ConfVar -> DataType)
-> (forall (t :: * -> *) (c :: * -> *).
    Typeable t =>
    (forall d. Data d => c (t d)) -> Maybe (c ConfVar))
-> (forall (t :: * -> * -> *) (c :: * -> *).
    Typeable t =>
    (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c ConfVar))
-> ((forall b. Data b => b -> b) -> ConfVar -> ConfVar)
-> (forall r r'.
    (r -> r' -> r)
    -> r -> (forall d. Data d => d -> r') -> ConfVar -> r)
-> (forall r r'.
    (r' -> r -> r)
    -> r -> (forall d. Data d => d -> r') -> ConfVar -> r)
-> (forall u. (forall d. Data d => d -> u) -> ConfVar -> [u])
-> (forall u. Int -> (forall d. Data d => d -> u) -> ConfVar -> u)
-> (forall (m :: * -> *).
    Monad m =>
    (forall d. Data d => d -> m d) -> ConfVar -> m ConfVar)
-> (forall (m :: * -> *).
    MonadPlus m =>
    (forall d. Data d => d -> m d) -> ConfVar -> m ConfVar)
-> (forall (m :: * -> *).
    MonadPlus m =>
    (forall d. Data d => d -> m d) -> ConfVar -> m ConfVar)
-> Data ConfVar
ConfVar -> Constr
ConfVar -> DataType
(forall b. Data b => b -> b) -> ConfVar -> ConfVar
forall a.
Typeable a
-> (forall (c :: * -> *).
    (forall d b. Data d => c (d -> b) -> d -> c b)
    -> (forall g. g -> c g) -> a -> c a)
-> (forall (c :: * -> *).
    (forall b r. Data b => c (b -> r) -> c r)
    -> (forall r. r -> c r) -> Constr -> c a)
-> (a -> Constr)
-> (a -> DataType)
-> (forall (t :: * -> *) (c :: * -> *).
    Typeable t =>
    (forall d. Data d => c (t d)) -> Maybe (c a))
-> (forall (t :: * -> * -> *) (c :: * -> *).
    Typeable t =>
    (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c a))
-> ((forall b. Data b => b -> b) -> a -> a)
-> (forall r r'.
    (r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> a -> r)
-> (forall r r'.
    (r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> a -> r)
-> (forall u. (forall d. Data d => d -> u) -> a -> [u])
-> (forall u. Int -> (forall d. Data d => d -> u) -> a -> u)
-> (forall (m :: * -> *).
    Monad m =>
    (forall d. Data d => d -> m d) -> a -> m a)
-> (forall (m :: * -> *).
    MonadPlus m =>
    (forall d. Data d => d -> m d) -> a -> m a)
-> (forall (m :: * -> *).
    MonadPlus m =>
    (forall d. Data d => d -> m d) -> a -> m a)
-> Data a
forall u. Int -> (forall d. Data d => d -> u) -> ConfVar -> u
forall u. (forall d. Data d => d -> u) -> ConfVar -> [u]
forall r r'.
(r -> r' -> r)
-> r -> (forall d. Data d => d -> r') -> ConfVar -> r
forall r r'.
(r' -> r -> r)
-> r -> (forall d. Data d => d -> r') -> ConfVar -> r
forall (m :: * -> *).
Monad m =>
(forall d. Data d => d -> m d) -> ConfVar -> m ConfVar
forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> ConfVar -> m ConfVar
forall (c :: * -> *).
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c ConfVar
forall (c :: * -> *).
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> ConfVar -> c ConfVar
forall (t :: * -> *) (c :: * -> *).
Typeable t =>
(forall d. Data d => c (t d)) -> Maybe (c ConfVar)
forall (t :: * -> * -> *) (c :: * -> *).
Typeable t =>
(forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c ConfVar)
$cgfoldl :: forall (c :: * -> *).
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> ConfVar -> c ConfVar
gfoldl :: forall (c :: * -> *).
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> ConfVar -> c ConfVar
$cgunfold :: forall (c :: * -> *).
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c ConfVar
gunfold :: forall (c :: * -> *).
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c ConfVar
$ctoConstr :: ConfVar -> Constr
toConstr :: ConfVar -> Constr
$cdataTypeOf :: ConfVar -> DataType
dataTypeOf :: ConfVar -> DataType
$cdataCast1 :: forall (t :: * -> *) (c :: * -> *).
Typeable t =>
(forall d. Data d => c (t d)) -> Maybe (c ConfVar)
dataCast1 :: forall (t :: * -> *) (c :: * -> *).
Typeable t =>
(forall d. Data d => c (t d)) -> Maybe (c ConfVar)
$cdataCast2 :: forall (t :: * -> * -> *) (c :: * -> *).
Typeable t =>
(forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c ConfVar)
dataCast2 :: forall (t :: * -> * -> *) (c :: * -> *).
Typeable t =>
(forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c ConfVar)
$cgmapT :: (forall b. Data b => b -> b) -> ConfVar -> ConfVar
gmapT :: (forall b. Data b => b -> b) -> ConfVar -> ConfVar
$cgmapQl :: forall r r'.
(r -> r' -> r)
-> r -> (forall d. Data d => d -> r') -> ConfVar -> r
gmapQl :: forall r r'.
(r -> r' -> r)
-> r -> (forall d. Data d => d -> r') -> ConfVar -> r
$cgmapQr :: forall r r'.
(r' -> r -> r)
-> r -> (forall d. Data d => d -> r') -> ConfVar -> r
gmapQr :: forall r r'.
(r' -> r -> r)
-> r -> (forall d. Data d => d -> r') -> ConfVar -> r
$cgmapQ :: forall u. (forall d. Data d => d -> u) -> ConfVar -> [u]
gmapQ :: forall u. (forall d. Data d => d -> u) -> ConfVar -> [u]
$cgmapQi :: forall u. Int -> (forall d. Data d => d -> u) -> ConfVar -> u
gmapQi :: forall u. Int -> (forall d. Data d => d -> u) -> ConfVar -> u
$cgmapM :: forall (m :: * -> *).
Monad m =>
(forall d. Data d => d -> m d) -> ConfVar -> m ConfVar
gmapM :: forall (m :: * -> *).
Monad m =>
(forall d. Data d => d -> m d) -> ConfVar -> m ConfVar
$cgmapMp :: forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> ConfVar -> m ConfVar
gmapMp :: forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> ConfVar -> m ConfVar
$cgmapMo :: forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> ConfVar -> m ConfVar
gmapMo :: forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> ConfVar -> m ConfVar
Data, (forall x. ConfVar -> Rep ConfVar x)
-> (forall x. Rep ConfVar x -> ConfVar) -> Generic ConfVar
forall x. Rep ConfVar x -> ConfVar
forall x. ConfVar -> Rep ConfVar x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cfrom :: forall x. ConfVar -> Rep ConfVar x
$cto :: forall x. Rep ConfVar x -> ConfVar
Generic)

instance Binary ConfVar
instance Structured ConfVar

instance NFData ConfVar where rnf :: ConfVar -> ()
rnf = ConfVar -> ()
forall a. (Generic a, GNFData (Rep a)) => a -> ()
genericRnf