X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=Data%2FVersion.hs;h=8aa5bb18a18bb398828074cc88d25fb36d469816;hb=696a935b0818ab9cf1a4fbd93faf9add88ead1cd;hp=beda6bac6799180aa8351af2d73535fbe0462f99;hpb=04b702d6660f8fcae2d50277d596c92cd6766a84;p=ghc-base.git diff --git a/Data/Version.hs b/Data/Version.hs index beda6ba..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,13 +30,22 @@ module Data.Version ( showVersion, parseVersion, ) where -#if __GLASGOW_HASKELL__ < 603 -import Distribution.Compat.ReadP -#else +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__ < 602 +#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 ) @@ -95,9 +104,15 @@ data Version = #endif ) -#if __GLASGOW_HASKELL__ < 602 +#if !__GLASGOW_HASKELL__ +versionTc :: TyCon +versionTc = mkTyCon "Version" + +instance Typeable Version where + typeOf _ = mkTyConApp versionTc [] +#elif __GLASGOW_HASKELL__ < 602 versionTc :: TyCon -versionTc = mkTyCon "()" +versionTc = mkTyCon "Version" instance Typeable Version where typeOf _ = mkAppTy versionTc [] @@ -125,10 +140,12 @@ showVersion (Version branch tags) -- | A parser for versions in the format produced by 'showVersion'. -- -#if __GLASGOW_HASKELL__ < 602 -parseVersion :: ReadP r Version -#else +#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)