{-# LANGUAGE CPP #-}
module Distribution.Cab.Version (
    Ver
  , toVer
  , toVersion
  , verToString
  , version
  , versionToString
  ) where

import Distribution.Cab.Utils
import Distribution.Version

-- | Package version.
newtype Ver = Ver [Int] deriving (Ver -> Ver -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: Ver -> Ver -> Bool
$c/= :: Ver -> Ver -> Bool
== :: Ver -> Ver -> Bool
$c== :: Ver -> Ver -> Bool
Eq,Eq Ver
Ver -> Ver -> Bool
Ver -> Ver -> Ordering
Ver -> Ver -> Ver
forall a.
Eq a
-> (a -> a -> Ordering)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> a)
-> (a -> a -> a)
-> Ord a
min :: Ver -> Ver -> Ver
$cmin :: Ver -> Ver -> Ver
max :: Ver -> Ver -> Ver
$cmax :: Ver -> Ver -> Ver
>= :: Ver -> Ver -> Bool
$c>= :: Ver -> Ver -> Bool
> :: Ver -> Ver -> Bool
$c> :: Ver -> Ver -> Bool
<= :: Ver -> Ver -> Bool
$c<= :: Ver -> Ver -> Bool
< :: Ver -> Ver -> Bool
$c< :: Ver -> Ver -> Bool
compare :: Ver -> Ver -> Ordering
$ccompare :: Ver -> Ver -> Ordering
Ord,ReadPrec [Ver]
ReadPrec Ver
Int -> ReadS Ver
ReadS [Ver]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [Ver]
$creadListPrec :: ReadPrec [Ver]
readPrec :: ReadPrec Ver
$creadPrec :: ReadPrec Ver
readList :: ReadS [Ver]
$creadList :: ReadS [Ver]
readsPrec :: Int -> ReadS Ver
$creadsPrec :: Int -> ReadS Ver
Read,Int -> Ver -> ShowS
[Ver] -> ShowS
Ver -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [Ver] -> ShowS
$cshowList :: [Ver] -> ShowS
show :: Ver -> String
$cshow :: Ver -> String
showsPrec :: Int -> Ver -> ShowS
$cshowsPrec :: Int -> Ver -> ShowS
Show)

-- | Creating 'Ver'.
--
-- >>> toVer [1,2,3]
-- Ver [1,2,3]
toVer :: [Int] -> Ver
toVer :: [Int] -> Ver
toVer [Int]
is = [Int] -> Ver
Ver [Int]
is

-- | Creating 'Version' in Cabal.
toVersion :: [Int] -> Version
#if MIN_VERSION_Cabal(2,0,0)
toVersion :: [Int] -> Version
toVersion [Int]
is = [Int] -> Version
mkVersion [Int]
is
#else
toVersion is = Version is []
#endif

-- | From 'Version' to 'String'
--
-- >>> verToString $ toVer [1,2,3]
-- "1.2.3"
verToString :: Ver -> String
verToString :: Ver -> String
verToString (Ver [Int]
ver) = [Int] -> String
toDotted [Int]
ver

-- | From 'Version' in Cabal to 'Ver'.
--
-- >>> version $ toVersion [1,2,3]
-- Ver [1,2,3]
version :: Version -> Ver
#if MIN_VERSION_Cabal(2,0,0)
version :: Version -> Ver
version = [Int] -> Ver
Ver forall b c a. (b -> c) -> (a -> b) -> a -> c
. Version -> [Int]
versionNumbers
#else
version = Ver . versionBranch
#endif

-- | From 'Version' in Cabal to 'String'.
--
-- >>> versionToString $ toVersion [1,2,3]
-- "1.2.3"
versionToString :: Version -> String
versionToString :: Version -> String
versionToString = Ver -> String
verToString forall b c a. (b -> c) -> (a -> b) -> a -> c
. Version -> Ver
version