module Hix.Managed.Cabal.Data.SolveTarget where import Distribution.Client.Dependency (PackagePreference (..), PackageSpecifier (NamedPackage, SpecificSourcePackage)) import Distribution.Client.Types (UnresolvedSourcePackage) import Distribution.Pretty (Pretty (pretty)) import Distribution.Solver.Types.PackageConstraint (dispPackageProperty) import Distribution.Version (simplifyVersionRange) import Text.PrettyPrint (Doc, (<+>)) import Hix.Pretty (prettyL) data SolveTarget = SolveTarget { SolveTarget -> PackageSpecifier UnresolvedSourcePackage dep :: PackageSpecifier UnresolvedSourcePackage, SolveTarget -> [PackagePreference] prefs :: [PackagePreference] } prettySpec :: PackageSpecifier UnresolvedSourcePackage -> Doc prettySpec :: PackageSpecifier UnresolvedSourcePackage -> Doc prettySpec = \case NamedPackage PackageName name [PackageProperty] prop -> Doc "Named:" Doc -> Doc -> Doc <+> PackageName -> Doc forall a. Pretty a => a -> Doc pretty PackageName name Doc -> Doc -> Doc <+> [Doc] -> Doc forall (t :: * -> *) a. (Pretty a, Foldable t) => t a -> Doc prettyL (PackageProperty -> Doc dispPackageProperty (PackageProperty -> Doc) -> [PackageProperty] -> [Doc] forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b <$> [PackageProperty] prop) SpecificSourcePackage UnresolvedSourcePackage pkg -> Doc "Source:" Doc -> Doc -> Doc <+> UnresolvedSourcePackage -> Doc forall b a. (Show a, IsString b) => a -> b show UnresolvedSourcePackage pkg prettyPref :: PackagePreference -> Doc prettyPref :: PackagePreference -> Doc prettyPref = \case PackageVersionPreference PackageName pn VersionRange vr -> PackageName -> Doc forall a. Pretty a => a -> Doc pretty PackageName pn Doc -> Doc -> Doc <+> VersionRange -> Doc forall a. Pretty a => a -> Doc pretty (VersionRange -> VersionRange simplifyVersionRange VersionRange vr) PackageInstalledPreference PackageName pn InstalledPreference ip -> PackageName -> Doc forall a. Pretty a => a -> Doc pretty PackageName pn Doc -> Doc -> Doc <+> InstalledPreference -> Doc forall b a. (Show a, IsString b) => a -> b show InstalledPreference ip PackageStanzasPreference PackageName pn [OptionalStanza] st -> PackageName -> Doc forall a. Pretty a => a -> Doc pretty PackageName pn Doc -> Doc -> Doc <+> [OptionalStanza] -> Doc forall b a. (Show a, IsString b) => a -> b show [OptionalStanza] st instance Pretty SolveTarget where pretty :: SolveTarget -> Doc pretty SolveTarget {[PackagePreference] PackageSpecifier UnresolvedSourcePackage dep :: SolveTarget -> PackageSpecifier UnresolvedSourcePackage prefs :: SolveTarget -> [PackagePreference] dep :: PackageSpecifier UnresolvedSourcePackage prefs :: [PackagePreference] ..} = PackageSpecifier UnresolvedSourcePackage -> Doc prettySpec PackageSpecifier UnresolvedSourcePackage dep Doc -> Doc -> Doc <+> [Doc] -> Doc forall (t :: * -> *) a. (Pretty a, Foldable t) => t a -> Doc prettyL (PackagePreference -> Doc prettyPref (PackagePreference -> Doc) -> [PackagePreference] -> [Doc] forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b <$> [PackagePreference] prefs)