module Hix.Data.PackageId where import Distribution.Package (PackageIdentifier (PackageIdentifier)) import Distribution.Pretty (Pretty (pretty)) import Distribution.Version (Version) import Exon (exon) import qualified Hix.Data.PackageName as PackageName import Hix.Data.PackageName (PackageName (..)) import Hix.Pretty (prettyText, showP) data PackageId = PackageId { PackageId -> PackageName name :: PackageName, PackageId -> Version version :: Version } deriving stock (PackageId -> PackageId -> Bool (PackageId -> PackageId -> Bool) -> (PackageId -> PackageId -> Bool) -> Eq PackageId forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a $c== :: PackageId -> PackageId -> Bool == :: PackageId -> PackageId -> Bool $c/= :: PackageId -> PackageId -> Bool /= :: PackageId -> PackageId -> Bool Eq, Int -> PackageId -> ShowS [PackageId] -> ShowS PackageId -> String (Int -> PackageId -> ShowS) -> (PackageId -> String) -> ([PackageId] -> ShowS) -> Show PackageId forall a. (Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a $cshowsPrec :: Int -> PackageId -> ShowS showsPrec :: Int -> PackageId -> ShowS $cshow :: PackageId -> String show :: PackageId -> String $cshowList :: [PackageId] -> ShowS showList :: [PackageId] -> ShowS Show, Eq PackageId Eq PackageId => (PackageId -> PackageId -> Ordering) -> (PackageId -> PackageId -> Bool) -> (PackageId -> PackageId -> Bool) -> (PackageId -> PackageId -> Bool) -> (PackageId -> PackageId -> Bool) -> (PackageId -> PackageId -> PackageId) -> (PackageId -> PackageId -> PackageId) -> Ord PackageId PackageId -> PackageId -> Bool PackageId -> PackageId -> Ordering PackageId -> PackageId -> PackageId 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 $ccompare :: PackageId -> PackageId -> Ordering compare :: PackageId -> PackageId -> Ordering $c< :: PackageId -> PackageId -> Bool < :: PackageId -> PackageId -> Bool $c<= :: PackageId -> PackageId -> Bool <= :: PackageId -> PackageId -> Bool $c> :: PackageId -> PackageId -> Bool > :: PackageId -> PackageId -> Bool $c>= :: PackageId -> PackageId -> Bool >= :: PackageId -> PackageId -> Bool $cmax :: PackageId -> PackageId -> PackageId max :: PackageId -> PackageId -> PackageId $cmin :: PackageId -> PackageId -> PackageId min :: PackageId -> PackageId -> PackageId Ord, (forall x. PackageId -> Rep PackageId x) -> (forall x. Rep PackageId x -> PackageId) -> Generic PackageId forall x. Rep PackageId x -> PackageId forall x. PackageId -> Rep PackageId x forall a. (forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a $cfrom :: forall x. PackageId -> Rep PackageId x from :: forall x. PackageId -> Rep PackageId x $cto :: forall x. Rep PackageId x -> PackageId to :: forall x. Rep PackageId x -> PackageId Generic) renderPackage :: PackageId -> Text renderPackage :: PackageId -> Text renderPackage PackageId {Version PackageName name :: PackageId -> PackageName version :: PackageId -> Version name :: PackageName version :: Version ..} = [exon|##{name}-#{showP version}|] instance Pretty PackageId where pretty :: PackageId -> Doc pretty = Text -> Doc prettyText (Text -> Doc) -> (PackageId -> Text) -> PackageId -> Doc forall b c a. (b -> c) -> (a -> b) -> a -> c . PackageId -> Text renderPackage toCabal :: PackageId -> PackageIdentifier toCabal :: PackageId -> PackageIdentifier toCabal PackageId {Version PackageName name :: PackageId -> PackageName version :: PackageId -> Version name :: PackageName version :: Version ..} = PackageName -> Version -> PackageIdentifier PackageIdentifier (PackageName -> PackageName PackageName.toCabal PackageName name) Version version fromCabal :: PackageIdentifier -> PackageId fromCabal :: PackageIdentifier -> PackageId fromCabal (PackageIdentifier (PackageName -> PackageName PackageName.fromCabal -> PackageName name) Version version) = PackageId {Version PackageName name :: PackageName version :: Version name :: PackageName version :: Version ..}