--
-- 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.
--
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 )
-- 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
-- | 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}