summaryrefslogtreecommitdiff
path: root/libraries/base/Text/ParserCombinators/ReadPrec.hs
diff options
context:
space:
mode:
Diffstat (limited to 'libraries/base/Text/ParserCombinators/ReadPrec.hs')
-rw-r--r--libraries/base/Text/ParserCombinators/ReadPrec.hs17
1 files changed, 12 insertions, 5 deletions
diff --git a/libraries/base/Text/ParserCombinators/ReadPrec.hs b/libraries/base/Text/ParserCombinators/ReadPrec.hs
index 235436c4d6..1d109b59bc 100644
--- a/libraries/base/Text/ParserCombinators/ReadPrec.hs
+++ b/libraries/base/Text/ParserCombinators/ReadPrec.hs
@@ -16,9 +16,9 @@
-----------------------------------------------------------------------------
module Text.ParserCombinators.ReadPrec
- (
+ (
ReadPrec,
-
+
-- * Precedences
Prec,
minPrec,
@@ -61,7 +61,7 @@ import qualified Text.ParserCombinators.ReadP as ReadP
, pfail
)
-import Control.Monad( MonadPlus(..) )
+import Control.Monad( MonadPlus(..), Alternative(..) )
import GHC.Num( Num(..) )
import GHC.Base
@@ -75,17 +75,24 @@ newtype ReadPrec a = P (Prec -> ReadP a)
instance Functor ReadPrec where
fmap h (P f) = P (\n -> fmap h (f n))
+instance Applicative ReadPrec where
+ pure = return
+ (<*>) = liftA2 id
+
instance Monad ReadPrec where
return x = P (\_ -> return x)
fail s = P (\_ -> fail s)
P f >>= k = P (\n -> do a <- f n; let P f' = k a in f' n)
-
+
+instance Alternative ReadPrec where
+ empty = mzero
+ (<|>) = mplus
+
instance MonadPlus ReadPrec where
mzero = pfail
mplus = (+++)
-- precedences
-
type Prec = Int
minPrec :: Prec