module Distribution.Types.MissingDependencyReason
  ( MissingDependencyReason (..)
  ) where

import Data.List.NonEmpty (NonEmpty)
import Distribution.Types.LibraryName (LibraryName)
import Distribution.Types.PackageName (PackageName)
import Distribution.Types.Version (Version)

-- | A reason for a dependency failing to solve.
--
-- This helps pinpoint dependencies that are installed with an incorrect
-- version vs. dependencies that are not installed at all.
data MissingDependencyReason
  = -- | One or more libraries is missing.
    MissingLibrary (NonEmpty LibraryName)
  | -- | A package is not installed.
    MissingPackage
  | -- | A package is installed, but the versions don't match.
    --
    -- Contains the available versions.
    WrongVersion [Version]
  | -- | A component is not installed.
    MissingComponent PackageName
  deriving (Int -> MissingDependencyReason -> ShowS
[MissingDependencyReason] -> ShowS
MissingDependencyReason -> String
(Int -> MissingDependencyReason -> ShowS)
-> (MissingDependencyReason -> String)
-> ([MissingDependencyReason] -> ShowS)
-> Show MissingDependencyReason
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> MissingDependencyReason -> ShowS
showsPrec :: Int -> MissingDependencyReason -> ShowS
$cshow :: MissingDependencyReason -> String
show :: MissingDependencyReason -> String
$cshowList :: [MissingDependencyReason] -> ShowS
showList :: [MissingDependencyReason] -> ShowS
Show)