From: malcolm Date: Tue, 11 Jan 2005 13:44:40 +0000 (+0000) Subject: [project @ 2005-01-11 13:44:39 by malcolm] X-Git-Tag: nhc98-1-18-release~127 X-Git-Url: http://git.megacz.com/?p=ghc-base.git;a=commitdiff_plain;h=1c12fc7d08d35015f32679738cf24f0924933449 [project @ 2005-01-11 13:44:39 by malcolm] Hack around the non-portable ReadP library to allow nhc98 to use Data.Version. --- diff --git a/Data/Version.hs b/Data/Version.hs index fe15c3c..df20a4b 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. -- @@ -37,7 +37,7 @@ import Prelude -- necessary to get dependencies right -- 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__ +#if __GLASGOW_HASKELL__ >= 603 || __HUGS__ || __NHC__ import Text.ParserCombinators.ReadP #else import Distribution.Compat.ReadP @@ -140,8 +140,10 @@ showVersion (Version branch tags) -- | A parser for versions in the format produced by 'showVersion'. -- -#if __GLASGOW_HASKELL__ <= 602 && !__HUGS__ +#if __GLASGOW_HASKELL__ <= 602 && !__HUGS__ && !__NHC__ parseVersion :: ReadP r Version +#elif __NHC__ +parseVersion :: ReadPN r Version #else parseVersion :: ReadP Version #endif diff --git a/Makefile.nhc98 b/Makefile.nhc98 index 81179dd..217231d 100644 --- a/Makefile.nhc98 +++ b/Makefile.nhc98 @@ -28,10 +28,10 @@ SRCS = \ Text/PrettyPrint/HughesPJ.hs Text/PrettyPrint.hs \ Text/Html/BlockTable.hs Text/Html.hs Text/Printf.hs \ Text/Read.hs Text/Show.hs Text/Show/Functions.hs \ + Text/ParserCombinators/ReadP.hs Data/Version.hs -# Text/ParserCombinators/ReadP.hs Text/ParserCombinators/ReadPrec.hs -# Data/Version.hs \ +# Text/ParserCombinators/ReadPrec.hs # [Data/Dynamic.hs] Data/Generics.hs Data/STRef.hs Data/Unique.hs # System/Mem.hs System/Mem/StableName.hs System/Mem/Weak.hs # System/Posix/Types.hs System/Posix/Signals.hsc diff --git a/Text/ParserCombinators/ReadP.hs b/Text/ParserCombinators/ReadP.hs index b22290d..5835d9a 100644 --- a/Text/ParserCombinators/ReadP.hs +++ b/Text/ParserCombinators/ReadP.hs @@ -20,7 +20,11 @@ module Text.ParserCombinators.ReadP ( -- * The 'ReadP' type +#ifndef __NHC__ ReadP, -- :: * -> *; instance Functor, Monad, MonadPlus +#else + ReadPN, -- :: * -> * -> *; instance Functor, Monad, MonadPlus +#endif -- * Primitive operations get, -- :: ReadP Char @@ -148,7 +152,12 @@ instance MonadPlus P where -- --------------------------------------------------------------------------- -- The ReadP type +#ifndef __NHC__ newtype ReadP a = R (forall b . (a -> P b) -> P b) +#else +#define ReadP (ReadPN b) +newtype ReadPN b a = R ((a -> P b) -> P b) +#endif -- Functor, Monad, MonadPlus @@ -200,7 +209,11 @@ pfail = R (\_ -> Fail) -- ^ Symmetric choice. R f1 +++ R f2 = R (\k -> f1 k `mplus` f2 k) +#ifndef __NHC__ (<++) :: ReadP a -> ReadP a -> ReadP a +#else +(<++) :: ReadPN a a -> ReadPN a a -> ReadPN a a +#endif -- ^ Local, exclusive, left-biased choice: If left parser -- locally produces any result at all, then right parser is -- not used. @@ -232,7 +245,11 @@ R f <++ q = discard n = get >> discard (n-1) #endif +#ifndef __NHC__ gather :: ReadP a -> ReadP (String, a) +#else +-- gather :: ReadPN (String->P b) a -> ReadPN (String->P b) (String, a) +#endif -- ^ Transforms a parser into one that does the same, but -- in addition returns the exact characters read. -- IMPORTANT NOTE: 'gather' gives a runtime error if its first argument @@ -385,7 +402,11 @@ chainl1 p op = p >>= rest rest (f x y) +++ return x +#ifndef __NHC__ manyTill :: ReadP a -> ReadP end -> ReadP [a] +#else +manyTill :: ReadPN [a] a -> ReadPN [a] end -> ReadPN [a] [a] +#endif -- ^ @manyTill p end@ parses zero or more occurrences of @p@, until @end@ -- succeeds. Returns a list of values returned by @p@. manyTill p end = scan @@ -394,7 +415,11 @@ manyTill p end = scan -- --------------------------------------------------------------------------- -- Converting between ReadP and Read +#ifndef __NHC__ readP_to_S :: ReadP a -> ReadS a +#else +readP_to_S :: ReadPN a a -> ReadS a +#endif -- ^ Converts a parser into a Haskell ReadS-style function. -- This is the main way in which you can \"run\" a 'ReadP' parser: -- the expanded type is