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

import Distribution.Compat.Prelude
import Prelude ()

import Distribution.Parsec
import Distribution.Pretty
import Distribution.Types.PackageName
import Distribution.Types.VersionRange

import qualified Distribution.Compat.CharParsing as P
import           Text.PrettyPrint                ((<+>))

-- | A version constraint on a package. Different from 'ExeDependency' and
-- 'Dependency' since it does not specify the need for a component, not even
-- the main library.
-- There are a few places in the codebase where 'Dependency' is used where
-- 'PackageVersionConstraint' should be used instead (#5570).
data PackageVersionConstraint = PackageVersionConstraint PackageName VersionRange
                  deriving ((forall x.
 PackageVersionConstraint -> Rep PackageVersionConstraint x)
-> (forall x.
    Rep PackageVersionConstraint x -> PackageVersionConstraint)
-> Generic PackageVersionConstraint
forall x.
Rep PackageVersionConstraint x -> PackageVersionConstraint
forall x.
PackageVersionConstraint -> Rep PackageVersionConstraint x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x.
Rep PackageVersionConstraint x -> PackageVersionConstraint
$cfrom :: forall x.
PackageVersionConstraint -> Rep PackageVersionConstraint x
Generic, ReadPrec [PackageVersionConstraint]
ReadPrec PackageVersionConstraint
Int -> ReadS PackageVersionConstraint
ReadS [PackageVersionConstraint]
(Int -> ReadS PackageVersionConstraint)
-> ReadS [PackageVersionConstraint]
-> ReadPrec PackageVersionConstraint
-> ReadPrec [PackageVersionConstraint]
-> Read PackageVersionConstraint
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [PackageVersionConstraint]
$creadListPrec :: ReadPrec [PackageVersionConstraint]
readPrec :: ReadPrec PackageVersionConstraint
$creadPrec :: ReadPrec PackageVersionConstraint
readList :: ReadS [PackageVersionConstraint]
$creadList :: ReadS [PackageVersionConstraint]
readsPrec :: Int -> ReadS PackageVersionConstraint
$creadsPrec :: Int -> ReadS PackageVersionConstraint
External instance of the constraint type Read VersionRange
External instance of the constraint type Read PackageName
External instance of the constraint type Monad ReadPrec
External instance of the constraint type Monad ReadPrec
Instance of class: Read of the constraint type Read PackageVersionConstraint
Read, Int -> PackageVersionConstraint -> ShowS
[PackageVersionConstraint] -> ShowS
PackageVersionConstraint -> String
(Int -> PackageVersionConstraint -> ShowS)
-> (PackageVersionConstraint -> String)
-> ([PackageVersionConstraint] -> ShowS)
-> Show PackageVersionConstraint
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [PackageVersionConstraint] -> ShowS
$cshowList :: [PackageVersionConstraint] -> ShowS
show :: PackageVersionConstraint -> String
$cshow :: PackageVersionConstraint -> String
showsPrec :: Int -> PackageVersionConstraint -> ShowS
$cshowsPrec :: Int -> PackageVersionConstraint -> ShowS
External instance of the constraint type Show VersionRange
External instance of the constraint type Show PackageName
External instance of the constraint type Ord Int
Show, PackageVersionConstraint -> PackageVersionConstraint -> Bool
(PackageVersionConstraint -> PackageVersionConstraint -> Bool)
-> (PackageVersionConstraint -> PackageVersionConstraint -> Bool)
-> Eq PackageVersionConstraint
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: PackageVersionConstraint -> PackageVersionConstraint -> Bool
$c/= :: PackageVersionConstraint -> PackageVersionConstraint -> Bool
== :: PackageVersionConstraint -> PackageVersionConstraint -> Bool
$c== :: PackageVersionConstraint -> PackageVersionConstraint -> Bool
External instance of the constraint type Eq VersionRange
External instance of the constraint type Eq PackageName
Eq, Typeable, Typeable PackageVersionConstraint
DataType
Constr
Typeable PackageVersionConstraint
-> (forall (c :: * -> *).
    (forall d b. Data d => c (d -> b) -> d -> c b)
    -> (forall g. g -> c g)
    -> PackageVersionConstraint
    -> c PackageVersionConstraint)
-> (forall (c :: * -> *).
    (forall b r. Data b => c (b -> r) -> c r)
    -> (forall r. r -> c r) -> Constr -> c PackageVersionConstraint)
-> (PackageVersionConstraint -> Constr)
-> (PackageVersionConstraint -> DataType)
-> (forall (t :: * -> *) (c :: * -> *).
    Typeable t =>
    (forall d. Data d => c (t d))
    -> Maybe (c PackageVersionConstraint))
-> (forall (t :: * -> * -> *) (c :: * -> *).
    Typeable t =>
    (forall d e. (Data d, Data e) => c (t d e))
    -> Maybe (c PackageVersionConstraint))
-> ((forall b. Data b => b -> b)
    -> PackageVersionConstraint -> PackageVersionConstraint)
-> (forall r r'.
    (r -> r' -> r)
    -> r
    -> (forall d. Data d => d -> r')
    -> PackageVersionConstraint
    -> r)
-> (forall r r'.
    (r' -> r -> r)
    -> r
    -> (forall d. Data d => d -> r')
    -> PackageVersionConstraint
    -> r)
-> (forall u.
    (forall d. Data d => d -> u) -> PackageVersionConstraint -> [u])
-> (forall u.
    Int
    -> (forall d. Data d => d -> u) -> PackageVersionConstraint -> u)
-> (forall (m :: * -> *).
    Monad m =>
    (forall d. Data d => d -> m d)
    -> PackageVersionConstraint -> m PackageVersionConstraint)
-> (forall (m :: * -> *).
    MonadPlus m =>
    (forall d. Data d => d -> m d)
    -> PackageVersionConstraint -> m PackageVersionConstraint)
-> (forall (m :: * -> *).
    MonadPlus m =>
    (forall d. Data d => d -> m d)
    -> PackageVersionConstraint -> m PackageVersionConstraint)
-> Data PackageVersionConstraint
PackageVersionConstraint -> DataType
PackageVersionConstraint -> Constr
(forall b. Data b => b -> b)
-> PackageVersionConstraint -> PackageVersionConstraint
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g)
-> PackageVersionConstraint
-> c PackageVersionConstraint
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c PackageVersionConstraint
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) -> PackageVersionConstraint -> u
forall u.
(forall d. Data d => d -> u) -> PackageVersionConstraint -> [u]
forall r r'.
(r -> r' -> r)
-> r
-> (forall d. Data d => d -> r')
-> PackageVersionConstraint
-> r
forall r r'.
(r' -> r -> r)
-> r
-> (forall d. Data d => d -> r')
-> PackageVersionConstraint
-> r
forall (m :: * -> *).
Monad m =>
(forall d. Data d => d -> m d)
-> PackageVersionConstraint -> m PackageVersionConstraint
forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d)
-> PackageVersionConstraint -> m PackageVersionConstraint
forall (c :: * -> *).
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c PackageVersionConstraint
forall (c :: * -> *).
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g)
-> PackageVersionConstraint
-> c PackageVersionConstraint
forall (t :: * -> *) (c :: * -> *).
Typeable t =>
(forall d. Data d => c (t d)) -> Maybe (c PackageVersionConstraint)
forall (t :: * -> * -> *) (c :: * -> *).
Typeable t =>
(forall d e. (Data d, Data e) => c (t d e))
-> Maybe (c PackageVersionConstraint)
$cPackageVersionConstraint :: Constr
$tPackageVersionConstraint :: DataType
gmapMo :: (forall d. Data d => d -> m d)
-> PackageVersionConstraint -> m PackageVersionConstraint
$cgmapMo :: forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d)
-> PackageVersionConstraint -> m PackageVersionConstraint
gmapMp :: (forall d. Data d => d -> m d)
-> PackageVersionConstraint -> m PackageVersionConstraint
$cgmapMp :: forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d)
-> PackageVersionConstraint -> m PackageVersionConstraint
gmapM :: (forall d. Data d => d -> m d)
-> PackageVersionConstraint -> m PackageVersionConstraint
$cgmapM :: forall (m :: * -> *).
Monad m =>
(forall d. Data d => d -> m d)
-> PackageVersionConstraint -> m PackageVersionConstraint
gmapQi :: Int
-> (forall d. Data d => d -> u) -> PackageVersionConstraint -> u
$cgmapQi :: forall u.
Int
-> (forall d. Data d => d -> u) -> PackageVersionConstraint -> u
gmapQ :: (forall d. Data d => d -> u) -> PackageVersionConstraint -> [u]
$cgmapQ :: forall u.
(forall d. Data d => d -> u) -> PackageVersionConstraint -> [u]
gmapQr :: (r' -> r -> r)
-> r
-> (forall d. Data d => d -> r')
-> PackageVersionConstraint
-> r
$cgmapQr :: forall r r'.
(r' -> r -> r)
-> r
-> (forall d. Data d => d -> r')
-> PackageVersionConstraint
-> r
gmapQl :: (r -> r' -> r)
-> r
-> (forall d. Data d => d -> r')
-> PackageVersionConstraint
-> r
$cgmapQl :: forall r r'.
(r -> r' -> r)
-> r
-> (forall d. Data d => d -> r')
-> PackageVersionConstraint
-> r
gmapT :: (forall b. Data b => b -> b)
-> PackageVersionConstraint -> PackageVersionConstraint
$cgmapT :: (forall b. Data b => b -> b)
-> PackageVersionConstraint -> PackageVersionConstraint
dataCast2 :: (forall d e. (Data d, Data e) => c (t d e))
-> Maybe (c PackageVersionConstraint)
$cdataCast2 :: forall (t :: * -> * -> *) (c :: * -> *).
Typeable t =>
(forall d e. (Data d, Data e) => c (t d e))
-> Maybe (c PackageVersionConstraint)
dataCast1 :: (forall d. Data d => c (t d)) -> Maybe (c PackageVersionConstraint)
$cdataCast1 :: forall (t :: * -> *) (c :: * -> *).
Typeable t =>
(forall d. Data d => c (t d)) -> Maybe (c PackageVersionConstraint)
dataTypeOf :: PackageVersionConstraint -> DataType
$cdataTypeOf :: PackageVersionConstraint -> DataType
toConstr :: PackageVersionConstraint -> Constr
$ctoConstr :: PackageVersionConstraint -> Constr
gunfold :: (forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c PackageVersionConstraint
$cgunfold :: forall (c :: * -> *).
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c PackageVersionConstraint
gfoldl :: (forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g)
-> PackageVersionConstraint
-> c PackageVersionConstraint
$cgfoldl :: forall (c :: * -> *).
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g)
-> PackageVersionConstraint
-> c PackageVersionConstraint
External instance of the constraint type Data PackageName
External instance of the constraint type Data VersionRange
Data)

instance Binary PackageVersionConstraint
instance Structured PackageVersionConstraint
instance NFData PackageVersionConstraint where rnf :: PackageVersionConstraint -> ()
rnf = PackageVersionConstraint -> ()
forall a. (Generic a, GNFData (Rep a)) => a -> ()
External instance of the constraint type forall (a :: * -> *) i (c :: Meta). GNFData a => GNFData (M1 i c a)
External instance of the constraint type forall (a :: * -> *) i (c :: Meta). GNFData a => GNFData (M1 i c a)
External instance of the constraint type forall (a :: * -> *) (b :: * -> *).
(GNFData a, GNFData b) =>
GNFData (a :*: b)
External instance of the constraint type forall (a :: * -> *) i (c :: Meta). GNFData a => GNFData (M1 i c a)
External instance of the constraint type forall a i. NFData a => GNFData (K1 i a)
External instance of the constraint type NFData PackageName
External instance of the constraint type forall (a :: * -> *) i (c :: Meta). GNFData a => GNFData (M1 i c a)
External instance of the constraint type forall a i. NFData a => GNFData (K1 i a)
External instance of the constraint type NFData VersionRange
Instance of class: Generic of the constraint type Generic PackageVersionConstraint
genericRnf

instance Pretty PackageVersionConstraint where
  pretty :: PackageVersionConstraint -> Doc
pretty (PackageVersionConstraint PackageName
name VersionRange
ver) = PackageName -> Doc
forall a. Pretty a => a -> Doc
External instance of the constraint type Pretty PackageName
pretty PackageName
name Doc -> Doc -> Doc
<+> VersionRange -> Doc
forall a. Pretty a => a -> Doc
External instance of the constraint type Pretty VersionRange
pretty VersionRange
ver

instance Parsec PackageVersionConstraint where
  parsec :: m PackageVersionConstraint
parsec = do
      PackageName
name <- m PackageName
forall a (m :: * -> *). (Parsec a, CabalParsing m) => m a
Evidence bound by a type signature of the constraint type CabalParsing m
External instance of the constraint type Parsec PackageName
parsec
      m ()
forall (m :: * -> *). CharParsing m => m ()
External instance of the constraint type forall (m :: * -> *). CabalParsing m => CharParsing m
Evidence bound by a type signature of the constraint type CabalParsing m
P.spaces
      VersionRange
ver <- m VersionRange
forall a (m :: * -> *). (Parsec a, CabalParsing m) => m a
Evidence bound by a type signature of the constraint type CabalParsing m
External instance of the constraint type Parsec VersionRange
parsec m VersionRange -> m VersionRange -> m VersionRange
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
External instance of the constraint type forall (m :: * -> *). Parsing m => Alternative m
External instance of the constraint type forall (m :: * -> *). CharParsing m => Parsing m
External instance of the constraint type forall (m :: * -> *). CabalParsing m => CharParsing m
Evidence bound by a type signature of the constraint type CabalParsing m
<|> VersionRange -> m VersionRange
forall (m :: * -> *) a. Monad m => a -> m a
External instance of the constraint type forall (m :: * -> *). MonadPlus m => Monad m
External instance of the constraint type forall (m :: * -> *). CabalParsing m => MonadPlus m
Evidence bound by a type signature of the constraint type CabalParsing m
return VersionRange
anyVersion
      m ()
forall (m :: * -> *). CharParsing m => m ()
External instance of the constraint type forall (m :: * -> *). CabalParsing m => CharParsing m
Evidence bound by a type signature of the constraint type CabalParsing m
P.spaces
      PackageVersionConstraint -> m PackageVersionConstraint
forall (m :: * -> *) a. Monad m => a -> m a
External instance of the constraint type forall (m :: * -> *). MonadPlus m => Monad m
External instance of the constraint type forall (m :: * -> *). CabalParsing m => MonadPlus m
Evidence bound by a type signature of the constraint type CabalParsing m
return (PackageName -> VersionRange -> PackageVersionConstraint
PackageVersionConstraint PackageName
name VersionRange
ver)