module Distribution.Solver.Types.PackagePath
( PackagePath(..)
, Namespace(..)
, Qualifier(..)
, dispQualifier
, Qualified(..)
, QPN
, dispQPN
, showQPN
) where
import Distribution.Solver.Compat.Prelude
import Prelude ()
import Distribution.Package (PackageName)
import Distribution.Pretty (pretty, flatStyle)
import qualified Text.PrettyPrint as Disp
data PackagePath = PackagePath Namespace Qualifier
deriving (PackagePath -> PackagePath -> Bool
(PackagePath -> PackagePath -> Bool)
-> (PackagePath -> PackagePath -> Bool) -> Eq PackagePath
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: PackagePath -> PackagePath -> Bool
$c/= :: PackagePath -> PackagePath -> Bool
== :: PackagePath -> PackagePath -> Bool
$c== :: PackagePath -> PackagePath -> Bool
Eq, Eq PackagePath
Eq PackagePath
-> (PackagePath -> PackagePath -> Ordering)
-> (PackagePath -> PackagePath -> Bool)
-> (PackagePath -> PackagePath -> Bool)
-> (PackagePath -> PackagePath -> Bool)
-> (PackagePath -> PackagePath -> Bool)
-> (PackagePath -> PackagePath -> PackagePath)
-> (PackagePath -> PackagePath -> PackagePath)
-> Ord PackagePath
PackagePath -> PackagePath -> Bool
PackagePath -> PackagePath -> Ordering
PackagePath -> PackagePath -> PackagePath
forall a.
Eq a
-> (a -> a -> Ordering)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> a)
-> (a -> a -> a)
-> Ord a
min :: PackagePath -> PackagePath -> PackagePath
$cmin :: PackagePath -> PackagePath -> PackagePath
max :: PackagePath -> PackagePath -> PackagePath
$cmax :: PackagePath -> PackagePath -> PackagePath
>= :: PackagePath -> PackagePath -> Bool
$c>= :: PackagePath -> PackagePath -> Bool
> :: PackagePath -> PackagePath -> Bool
$c> :: PackagePath -> PackagePath -> Bool
<= :: PackagePath -> PackagePath -> Bool
$c<= :: PackagePath -> PackagePath -> Bool
< :: PackagePath -> PackagePath -> Bool
$c< :: PackagePath -> PackagePath -> Bool
compare :: PackagePath -> PackagePath -> Ordering
$ccompare :: PackagePath -> PackagePath -> Ordering
$cp1Ord :: Eq PackagePath
Ord, Int -> PackagePath -> ShowS
[PackagePath] -> ShowS
PackagePath -> String
(Int -> PackagePath -> ShowS)
-> (PackagePath -> String)
-> ([PackagePath] -> ShowS)
-> Show PackagePath
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [PackagePath] -> ShowS
$cshowList :: [PackagePath] -> ShowS
show :: PackagePath -> String
$cshow :: PackagePath -> String
showsPrec :: Int -> PackagePath -> ShowS
$cshowsPrec :: Int -> PackagePath -> ShowS
Show)
data Namespace =
DefaultNamespace
| Independent PackageName
deriving (Namespace -> Namespace -> Bool
(Namespace -> Namespace -> Bool)
-> (Namespace -> Namespace -> Bool) -> Eq Namespace
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: Namespace -> Namespace -> Bool
$c/= :: Namespace -> Namespace -> Bool
== :: Namespace -> Namespace -> Bool
$c== :: Namespace -> Namespace -> Bool
Eq, Eq Namespace
Eq Namespace
-> (Namespace -> Namespace -> Ordering)
-> (Namespace -> Namespace -> Bool)
-> (Namespace -> Namespace -> Bool)
-> (Namespace -> Namespace -> Bool)
-> (Namespace -> Namespace -> Bool)
-> (Namespace -> Namespace -> Namespace)
-> (Namespace -> Namespace -> Namespace)
-> Ord Namespace
Namespace -> Namespace -> Bool
Namespace -> Namespace -> Ordering
Namespace -> Namespace -> Namespace
forall a.
Eq a
-> (a -> a -> Ordering)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> a)
-> (a -> a -> a)
-> Ord a
min :: Namespace -> Namespace -> Namespace
$cmin :: Namespace -> Namespace -> Namespace
max :: Namespace -> Namespace -> Namespace
$cmax :: Namespace -> Namespace -> Namespace
>= :: Namespace -> Namespace -> Bool
$c>= :: Namespace -> Namespace -> Bool
> :: Namespace -> Namespace -> Bool
$c> :: Namespace -> Namespace -> Bool
<= :: Namespace -> Namespace -> Bool
$c<= :: Namespace -> Namespace -> Bool
< :: Namespace -> Namespace -> Bool
$c< :: Namespace -> Namespace -> Bool
compare :: Namespace -> Namespace -> Ordering
$ccompare :: Namespace -> Namespace -> Ordering
$cp1Ord :: Eq Namespace
Ord, Int -> Namespace -> ShowS
[Namespace] -> ShowS
Namespace -> String
(Int -> Namespace -> ShowS)
-> (Namespace -> String)
-> ([Namespace] -> ShowS)
-> Show Namespace
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [Namespace] -> ShowS
$cshowList :: [Namespace] -> ShowS
show :: Namespace -> String
$cshow :: Namespace -> String
showsPrec :: Int -> Namespace -> ShowS
$cshowsPrec :: Int -> Namespace -> ShowS
Show)
dispNamespace :: Namespace -> Disp.Doc
dispNamespace :: Namespace -> Doc
dispNamespace Namespace
DefaultNamespace = Doc
Disp.empty
dispNamespace (Independent PackageName
i) = PackageName -> Doc
forall a. Pretty a => a -> Doc
pretty PackageName
i Doc -> Doc -> Doc
<<>> String -> Doc
Disp.text String
"."
data Qualifier =
QualToplevel
| QualBase PackageName
| QualSetup PackageName
| QualExe PackageName PackageName
deriving (Qualifier -> Qualifier -> Bool
(Qualifier -> Qualifier -> Bool)
-> (Qualifier -> Qualifier -> Bool) -> Eq Qualifier
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: Qualifier -> Qualifier -> Bool
$c/= :: Qualifier -> Qualifier -> Bool
== :: Qualifier -> Qualifier -> Bool
$c== :: Qualifier -> Qualifier -> Bool
Eq, Eq Qualifier
Eq Qualifier
-> (Qualifier -> Qualifier -> Ordering)
-> (Qualifier -> Qualifier -> Bool)
-> (Qualifier -> Qualifier -> Bool)
-> (Qualifier -> Qualifier -> Bool)
-> (Qualifier -> Qualifier -> Bool)
-> (Qualifier -> Qualifier -> Qualifier)
-> (Qualifier -> Qualifier -> Qualifier)
-> Ord Qualifier
Qualifier -> Qualifier -> Bool
Qualifier -> Qualifier -> Ordering
Qualifier -> Qualifier -> Qualifier
forall a.
Eq a
-> (a -> a -> Ordering)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> a)
-> (a -> a -> a)
-> Ord a
min :: Qualifier -> Qualifier -> Qualifier
$cmin :: Qualifier -> Qualifier -> Qualifier
max :: Qualifier -> Qualifier -> Qualifier
$cmax :: Qualifier -> Qualifier -> Qualifier
>= :: Qualifier -> Qualifier -> Bool
$c>= :: Qualifier -> Qualifier -> Bool
> :: Qualifier -> Qualifier -> Bool
$c> :: Qualifier -> Qualifier -> Bool
<= :: Qualifier -> Qualifier -> Bool
$c<= :: Qualifier -> Qualifier -> Bool
< :: Qualifier -> Qualifier -> Bool
$c< :: Qualifier -> Qualifier -> Bool
compare :: Qualifier -> Qualifier -> Ordering
$ccompare :: Qualifier -> Qualifier -> Ordering
$cp1Ord :: Eq Qualifier
Ord, Int -> Qualifier -> ShowS
[Qualifier] -> ShowS
Qualifier -> String
(Int -> Qualifier -> ShowS)
-> (Qualifier -> String)
-> ([Qualifier] -> ShowS)
-> Show Qualifier
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [Qualifier] -> ShowS
$cshowList :: [Qualifier] -> ShowS
show :: Qualifier -> String
$cshow :: Qualifier -> String
showsPrec :: Int -> Qualifier -> ShowS
$cshowsPrec :: Int -> Qualifier -> ShowS
Show)
dispQualifier :: Qualifier -> Disp.Doc
dispQualifier :: Qualifier -> Doc
dispQualifier Qualifier
QualToplevel = Doc
Disp.empty
dispQualifier (QualSetup PackageName
pn) = PackageName -> Doc
forall a. Pretty a => a -> Doc
pretty PackageName
pn Doc -> Doc -> Doc
<<>> String -> Doc
Disp.text String
":setup."
dispQualifier (QualExe PackageName
pn PackageName
pn2) = PackageName -> Doc
forall a. Pretty a => a -> Doc
pretty PackageName
pn Doc -> Doc -> Doc
<<>> String -> Doc
Disp.text String
":" Doc -> Doc -> Doc
<<>>
PackageName -> Doc
forall a. Pretty a => a -> Doc
pretty PackageName
pn2 Doc -> Doc -> Doc
<<>> String -> Doc
Disp.text String
":exe."
dispQualifier (QualBase PackageName
pn) = PackageName -> Doc
forall a. Pretty a => a -> Doc
pretty PackageName
pn Doc -> Doc -> Doc
<<>> String -> Doc
Disp.text String
"."
data Qualified a = Q PackagePath a
deriving (Qualified a -> Qualified a -> Bool
(Qualified a -> Qualified a -> Bool)
-> (Qualified a -> Qualified a -> Bool) -> Eq (Qualified a)
forall a. Eq a => Qualified a -> Qualified a -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: Qualified a -> Qualified a -> Bool
$c/= :: forall a. Eq a => Qualified a -> Qualified a -> Bool
== :: Qualified a -> Qualified a -> Bool
$c== :: forall a. Eq a => Qualified a -> Qualified a -> Bool
Eq, Eq (Qualified a)
Eq (Qualified a)
-> (Qualified a -> Qualified a -> Ordering)
-> (Qualified a -> Qualified a -> Bool)
-> (Qualified a -> Qualified a -> Bool)
-> (Qualified a -> Qualified a -> Bool)
-> (Qualified a -> Qualified a -> Bool)
-> (Qualified a -> Qualified a -> Qualified a)
-> (Qualified a -> Qualified a -> Qualified a)
-> Ord (Qualified a)
Qualified a -> Qualified a -> Bool
Qualified a -> Qualified a -> Ordering
Qualified a -> Qualified a -> Qualified a
forall a.
Eq a
-> (a -> a -> Ordering)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> a)
-> (a -> a -> a)
-> Ord a
forall a. Ord a => Eq (Qualified a)
forall a. Ord a => Qualified a -> Qualified a -> Bool
forall a. Ord a => Qualified a -> Qualified a -> Ordering
forall a. Ord a => Qualified a -> Qualified a -> Qualified a
min :: Qualified a -> Qualified a -> Qualified a
$cmin :: forall a. Ord a => Qualified a -> Qualified a -> Qualified a
max :: Qualified a -> Qualified a -> Qualified a
$cmax :: forall a. Ord a => Qualified a -> Qualified a -> Qualified a
>= :: Qualified a -> Qualified a -> Bool
$c>= :: forall a. Ord a => Qualified a -> Qualified a -> Bool
> :: Qualified a -> Qualified a -> Bool
$c> :: forall a. Ord a => Qualified a -> Qualified a -> Bool
<= :: Qualified a -> Qualified a -> Bool
$c<= :: forall a. Ord a => Qualified a -> Qualified a -> Bool
< :: Qualified a -> Qualified a -> Bool
$c< :: forall a. Ord a => Qualified a -> Qualified a -> Bool
compare :: Qualified a -> Qualified a -> Ordering
$ccompare :: forall a. Ord a => Qualified a -> Qualified a -> Ordering
$cp1Ord :: forall a. Ord a => Eq (Qualified a)
Ord, Int -> Qualified a -> ShowS
[Qualified a] -> ShowS
Qualified a -> String
(Int -> Qualified a -> ShowS)
-> (Qualified a -> String)
-> ([Qualified a] -> ShowS)
-> Show (Qualified a)
forall a. Show a => Int -> Qualified a -> ShowS
forall a. Show a => [Qualified a] -> ShowS
forall a. Show a => Qualified a -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [Qualified a] -> ShowS
$cshowList :: forall a. Show a => [Qualified a] -> ShowS
show :: Qualified a -> String
$cshow :: forall a. Show a => Qualified a -> String
showsPrec :: Int -> Qualified a -> ShowS
$cshowsPrec :: forall a. Show a => Int -> Qualified a -> ShowS
Show)
type QPN = Qualified PackageName
dispQPN :: QPN -> Disp.Doc
dispQPN :: QPN -> Doc
dispQPN (Q (PackagePath Namespace
ns Qualifier
qual) PackageName
pn) =
Namespace -> Doc
dispNamespace Namespace
ns Doc -> Doc -> Doc
<<>> Qualifier -> Doc
dispQualifier Qualifier
qual Doc -> Doc -> Doc
<<>> PackageName -> Doc
forall a. Pretty a => a -> Doc
pretty PackageName
pn
showQPN :: QPN -> String
showQPN :: QPN -> String
showQPN = Style -> Doc -> String
Disp.renderStyle Style
flatStyle (Doc -> String) -> (QPN -> Doc) -> QPN -> String
forall b c a. (b -> c) -> (a -> b) -> a -> c
. QPN -> Doc
dispQPN