content: {-# LANGUAGE DeriveGeneric #-}
  module Distribution.Solver.Types.ConstraintSource
      ( ConstraintSource(..)
      , showConstraintSource
      ) where
  
  import GHC.Generics (Generic)
  import Distribution.Compat.Binary (Binary(..))
  
  -- | Source of a 'PackageConstraint'.
  data ConstraintSource =
  
    -- | Main config file, which is ~/.etlas/config by default.
    ConstraintSourceMainConfig FilePath
  
    -- | Local cabal.project file
    | ConstraintSourceProjectConfig FilePath
  
    -- | Sandbox config file, which is ./cabal.sandbox.config by default.
    | ConstraintSourceSandboxConfig FilePath
  
    -- | User config file, which is ./cabal.config by default.
    | ConstraintSourceUserConfig FilePath
  
    -- | Flag specified on the command line.
    | ConstraintSourceCommandlineFlag
  
    -- | Target specified by the user, e.g., @etlas install package-0.1.0.0@
    -- implies @package==0.1.0.0@.
    | ConstraintSourceUserTarget
  
    -- | Internal requirement to use installed versions of packages like ghc-prim.
    | ConstraintSourceNonUpgradeablePackage
  
    -- | Internal requirement to use the add-source version of a package when that
    -- version is installed and the source is modified.
    | ConstraintSourceModifiedAddSourceDep
  
    -- | Internal constraint used by @etlas freeze@.
    | ConstraintSourceFreeze
  
    -- | Constraint specified by a config file, a command line flag, or a user
    -- target, when a more specific source is not known.
    | ConstraintSourceConfigFlagOrTarget
  
    -- | The source of the constraint is not specified.
    | ConstraintSourceUnknown
  
    -- | An internal constraint due to compatibility issues with the Setup.hs
    -- command line interface requires a minimum lower bound on Cabal
    | ConstraintSetupCabalMinVersion
    deriving (Eq, Show, Generic)
  
  instance Binary ConstraintSource
  
  -- | Description of a 'ConstraintSource'.
  showConstraintSource :: ConstraintSource -> String
  showConstraintSource (ConstraintSourceMainConfig path) =
      "main config " ++ path
  showConstraintSource (ConstraintSourceProjectConfig path) =
      "project config " ++ path
  showConstraintSource (ConstraintSourceSandboxConfig path) =
      "sandbox config " ++ path
  showConstraintSource (ConstraintSourceUserConfig path)= "user config " ++ path
  showConstraintSource ConstraintSourceCommandlineFlag = "command line flag"
  showConstraintSource ConstraintSourceUserTarget = "user target"
  showConstraintSource ConstraintSourceNonUpgradeablePackage =
      "non-upgradeable package"
  showConstraintSource ConstraintSourceModifiedAddSourceDep =
      "modified add-source dependency"
  showConstraintSource ConstraintSourceFreeze = "etlas freeze"
  showConstraintSource ConstraintSourceConfigFlagOrTarget =
      "config file, command line flag, or user target"
  showConstraintSource ConstraintSourceUnknown = "unknown source"
  showConstraintSource ConstraintSetupCabalMinVersion =
      "minimum version of etlas-cabal used by Setup.hs"
  