cabal-install-3.4.0.0: Distribution/Client/TargetProblem.hs
{-# LANGUAGE DeriveFunctor #-}
module Distribution.Client.TargetProblem (
TargetProblem(..),
TargetProblem',
) where
import Distribution.Client.Compat.Prelude
import Prelude ()
import Distribution.Client.ProjectPlanning (AvailableTarget)
import Distribution.Client.TargetSelector (SubComponentTarget, TargetSelector)
import Distribution.Package (PackageId, PackageName)
import Distribution.Simple.LocalBuildInfo (ComponentName (..))
import Distribution.Types.UnqualComponentName (UnqualComponentName)
-- | Target problems that occur during project orchestration.
data TargetProblem a
= TargetNotInProject PackageName
| TargetAvailableInIndex PackageName
| TargetComponentNotProjectLocal
PackageId ComponentName SubComponentTarget
| TargetComponentNotBuildable
PackageId ComponentName SubComponentTarget
| TargetOptionalStanzaDisabledByUser
PackageId ComponentName SubComponentTarget
| TargetOptionalStanzaDisabledBySolver
PackageId ComponentName SubComponentTarget
| TargetProblemUnknownComponent
PackageName (Either UnqualComponentName ComponentName)
| TargetProblemNoneEnabled TargetSelector [AvailableTarget ()]
-- ^ The 'TargetSelector' matches component (test/benchmark/...) but none are buildable
| TargetProblemNoTargets TargetSelector
-- ^ There are no targets at all
-- The target matching stuff only returns packages local to the project,
-- so these lookups should never fail, but if 'resolveTargets' is called
-- directly then of course it can.
| TargetProblemNoSuchPackage PackageId
| TargetProblemNoSuchComponent PackageId ComponentName
-- | A custom target problem
| CustomTargetProblem a
deriving (Eq, Show, Functor)
-- | Type alias for a 'TargetProblem' with no user-defined problems/errors.
--
-- Can use the utilities below for reporting/rendering problems.
type TargetProblem' = TargetProblem Void