packages feed

hix-0.7.0: lib/Hix/Managed/Cabal/Data/SolveTarget.hs

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 {
    dep :: PackageSpecifier UnresolvedSourcePackage,
    prefs :: [PackagePreference]
  }

prettySpec :: PackageSpecifier UnresolvedSourcePackage -> Doc
prettySpec = \case
  NamedPackage name prop ->
    "Named:" <+> pretty name <+> prettyL (dispPackageProperty <$> prop)
  SpecificSourcePackage pkg ->
    "Source:" <+> show pkg

prettyPref :: PackagePreference -> Doc
prettyPref = \case
  PackageVersionPreference   pn vr ->
    pretty pn <+> pretty (simplifyVersionRange vr)
  PackageInstalledPreference pn ip ->
    pretty pn <+> show ip
  PackageStanzasPreference pn st ->
    pretty pn <+> show st

instance Pretty SolveTarget where
  pretty SolveTarget {..} =
    prettySpec dep <+> prettyL (prettyPref <$> prefs)