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, (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 $sel:name:PackageId :: PackageId -> PackageName $sel:version:PackageId :: 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 $sel:name:PackageId :: PackageId -> PackageName $sel:version:PackageId :: 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 $sel:name:PackageId :: PackageName $sel:version:PackageId :: Version name :: PackageName version :: Version ..}