[project @ 2005-01-11 13:44:39 by malcolm]
authormalcolm <unknown>
Tue, 11 Jan 2005 13:44:40 +0000 (13:44 +0000)
committermalcolm <unknown>
Tue, 11 Jan 2005 13:44:40 +0000 (13:44 +0000)
Hack around the non-portable ReadP library to allow nhc98 to use Data.Version.

Data/Version.hs
Makefile.nhc98
Text/ParserCombinators/ReadP.hs

index fe15c3c..df20a4b 100644 (file)
@@ -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
index 81179dd..217231d 100644 (file)
@@ -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
index b22290d..5835d9a 100644 (file)
 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