{-# LANGUAGE CPP #-}
module Staversion.Internal.Version
(
V.Version,
V.VersionRange,
V.LowerBound(..),
V.UpperBound(..),
V.Bound(..),
V.VersionInterval,
V.thisVersion,
V.unionVersionRanges,
V.simplifyVersionRange,
V.fromVersionIntervals,
V.asVersionIntervals,
mkVersion,
mkVersionIntervals,
versionNumbers,
docVersionRange,
BaseVersion,
showBaseVersion,
parseVersionText
) where
import Data.Maybe (listToMaybe, fromJust)
import Data.Text (Text, unpack)
#if MIN_VERSION_Cabal(2,2,0)
#if MIN_VERSION_Cabal(3,6,0)
import qualified Distribution.Types.VersionInterval.Legacy as V
#else
import qualified Distribution.Types.VersionInterval as V
#endif
import qualified Distribution.Version as V (simplifyVersionRange)
import qualified Distribution.Types.Version as V
import qualified Distribution.Types.VersionRange as V
import qualified Distribution.Pretty as DP
#else
import qualified Distribution.Version as V
import qualified Distribution.Text as DT
#endif
import Data.Version (parseVersion)
import qualified Data.Version as BaseV
import Text.ParserCombinators.ReadP (readP_to_S)
import Text.PrettyPrint (Doc)
type BaseVersion = BaseV.Version
showBaseVersion :: BaseVersion -> String
showBaseVersion :: BaseVersion -> String
showBaseVersion = BaseVersion -> String
BaseV.showVersion
baseVToV :: BaseV.Version -> V.Version
baseVToV :: BaseVersion -> Version
baseVToV = [Int] -> Version
mkVersion forall b c a. (b -> c) -> (a -> b) -> a -> c
. BaseVersion -> [Int]
BaseV.versionBranch
parseVersionText :: Text -> Maybe V.Version
parseVersionText :: Text -> Maybe Version
parseVersionText = [(BaseVersion, String)] -> Maybe Version
extractResult forall b c a. (b -> c) -> (a -> b) -> a -> c
. (forall a. ReadP a -> ReadS a
readP_to_S ReadP BaseVersion
parseVersion) forall b c a. (b -> c) -> (a -> b) -> a -> c
. Text -> String
unpack where
extractResult :: [(BaseVersion, String)] -> Maybe Version
extractResult = forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap BaseVersion -> Version
baseVToV forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall a. [a] -> Maybe a
listToMaybe forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall a b. (a -> b) -> [a] -> [b]
map forall a b. (a, b) -> a
fst forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall a. (a -> Bool) -> [a] -> [a]
filter (\(BaseVersion, String)
pair -> forall a b. (a, b) -> b
snd (BaseVersion, String)
pair forall a. Eq a => a -> a -> Bool
== String
"")
#if MIN_VERSION_Cabal(2,0,0)
mkVersion :: [Int] -> V.Version
mkVersion :: [Int] -> Version
mkVersion = [Int] -> Version
V.mkVersion
versionNumbers :: V.Version -> [Int]
versionNumbers :: Version -> [Int]
versionNumbers = Version -> [Int]
V.versionNumbers
#else
mkVersion :: [Int] -> V.Version
mkVersion vs = V.Version vs []
versionNumbers :: V.Version -> [Int]
versionNumbers = V.versionBranch
#endif
#if MIN_VERSION_Cabal(2,2,0)
mkVersionIntervals :: [V.VersionInterval] -> V.VersionIntervals
mkVersionIntervals :: [VersionInterval] -> VersionIntervals
mkVersionIntervals = [VersionInterval] -> VersionIntervals
V.mkVersionIntervals
#else
mkVersionIntervals :: [V.VersionInterval] -> V.VersionIntervals
mkVersionIntervals = fromJust . V.mkVersionIntervals
#endif
#if MIN_VERSION_Cabal(2,2,0)
docVersionRange :: V.VersionRange -> Doc
docVersionRange :: VersionRange -> Doc
docVersionRange = forall a. Pretty a => a -> Doc
DP.pretty
#else
docVersionRange :: V.VersionRange -> Doc
docVersionRange = DT.disp
#endif