X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=Data%2FVersion.hs;h=8aa5bb18a18bb398828074cc88d25fb36d469816;hb=c926c49d6a535729214d31815a748520561191a6;hp=959baf72eb4f5de4a4f3840b60be3adc14157c13;hpb=366ac66be9a6584887d9a7726d43ef83dbad799b;p=ghc-base.git diff --git a/Data/Version.hs b/Data/Version.hs index 959baf7..8aa5bb1 100644 --- a/Data/Version.hs +++ b/Data/Version.hs @@ -6,7 +6,7 @@ -- -- Maintainer : libraries@haskell.org -- Stability : experimental --- Portability : portable +-- Portability : non-portable (local universal quantification in ReadP) -- -- A general library for representation and manipulation of versions. -- @@ -30,8 +30,27 @@ module Data.Version ( showVersion, parseVersion, ) where +import Prelude -- necessary to get dependencies right + +-- These #ifdefs are necessary because this code might be compiled as +-- part of ghc/lib/compat, and hence might be compiled by an older version +-- of GHC. In which case, we might need to pick up ReadP from +-- Distribution.Compat.ReadP, because the version in +-- Text.ParserCombinators.ReadP doesn't have all the combinators we need. +#if __GLASGOW_HASKELL__ >= 603 || __HUGS__ || __NHC__ import Text.ParserCombinators.ReadP +#else +import Distribution.Compat.ReadP +#endif + +#if !__GLASGOW_HASKELL__ +import Data.Typeable ( Typeable, TyCon, mkTyCon, mkTyConApp ) +#elif __GLASGOW_HASKELL__ < 602 +import Data.Dynamic ( Typeable(..), TyCon, mkTyCon, mkAppTy ) +#else import Data.Typeable ( Typeable ) +#endif + import Data.List ( intersperse ) import Control.Monad ( liftM ) import Data.Char ( isDigit, isAlphaNum ) @@ -79,7 +98,25 @@ data Version = -- The interpretation of the list of tags is entirely dependent -- on the entity that this version applies to. } - deriving (Read,Show,Typeable) + deriving (Read,Show +#if __GLASGOW_HASKELL__ >= 602 + ,Typeable +#endif + ) + +#if !__GLASGOW_HASKELL__ +versionTc :: TyCon +versionTc = mkTyCon "Version" + +instance Typeable Version where + typeOf _ = mkTyConApp versionTc [] +#elif __GLASGOW_HASKELL__ < 602 +versionTc :: TyCon +versionTc = mkTyCon "Version" + +instance Typeable Version where + typeOf _ = mkAppTy versionTc [] +#endif instance Eq Version where v1 == v2 = versionBranch v1 == versionBranch v2 @@ -103,7 +140,13 @@ showVersion (Version branch tags) -- | A parser for versions in the format produced by 'showVersion'. -- +#if __GLASGOW_HASKELL__ >= 603 || __HUGS__ parseVersion :: ReadP Version +#elif __NHC__ +parseVersion :: ReadPN r Version +#else +parseVersion :: ReadP r Version +#endif parseVersion = do branch <- sepBy1 (liftM read $ munch1 isDigit) (char '.') tags <- many (char '-' >> munch1 isAlphaNum) return Version{versionBranch=branch, versionTags=tags}