git.iko.soy/typeable/attoparsec
on master help sign in
Inline some instance definitions.
commit00da493fbfb19ca54511c125a3c3a380f0bb46b5 authorBryan O'Sullivan <bos@serpentine.com> dateMon 25 Jan 2010, 00:54 (17 years ago) parent0b76b78
3 files changed+51−20
Data/Attoparsec/Incremental.hs+15−6 Data/Attoparsec/Internal.hs+19−12 Data/Attoparsec/Word8Boilerplate.h+17−2
Data/Attoparsec/Incremental.hs+15−6
@@ -126,13 +126,21 @@ newtype Parser r a = Parser {
126126 unParser :: S -> (a -> S -> IResult r) -> IResult r
127127 }
128128
129−instance Monad (Parser r) where
130− return a = Parser $ \s k -> k a s
131− m >>= k = Parser $ \s cont -> unParser m s $ \a s' -> unParser (k a) s' cont
132− fail err = Parser $ \s -> const $ IFailed s err
129+returnP :: a -> Parser r a
130+returnP a = Parser $ \s k -> k a s
131+{-# INLINE returnP #-}
132+
133+bindP :: Parser r a -> (a -> Parser r b) -> Parser r b
134+bindP m k = Parser $ \s cont -> unParser m s $ \a s' -> unParser (k a) s' cont
135+{-# INLINE bindP #-}
136+
137+failP :: String -> Parser r a
138+failP err = Parser $ \s _ -> IFailed s err
139+{-# INLINE failP #-}
133140
134141zero :: Parser r a
135142zero = fail ""
143+{-# INLINE zero #-}
136144
137145-- | I'm not sure if this is a huge bodge or not. It probably is.
138146--
@@ -174,8 +182,9 @@ plus p1 p2 =
174182try :: Parser r a -> Parser r a
175183try p = p
176184
177−instance Functor (Parser r) where
178− fmap f m = Parser $ \s cont -> unParser m s (cont . f)
185+fmapP :: (a -> b) -> Parser r a -> Parser r b
186+fmapP f m = Parser $ \s cont -> unParser m s (cont . f)
187+{-# INLINE fmapP #-}
179188
180189infix 0 <?>
181190
Data/Attoparsec/Internal.hs+19−12
@@ -64,7 +64,7 @@ module Data.Attoparsec.Internal
6464
6565import Control.Applicative
6666 (Alternative(..), Applicative(..), (*>))
67−import Control.Monad (MonadPlus(..), ap)
67+import Control.Monad (MonadPlus(..))
6868import Control.Monad.Fix (MonadFix(..))
6969import Data.Attoparsec.FastSet (charClass, memberWord8)
7070import qualified Data.ByteString as SB
@@ -92,20 +92,27 @@ newtype Parser a = Parser {
9292 unParser :: S -> Either (LB.ByteString, [String]) (a, S)
9393 }
9494
95−instance Functor Parser where
96− fmap f p =
97− Parser $ \s ->
95+fmapP :: (a -> b) -> Parser a -> Parser b
96+fmapP f p = Parser $ \s ->
9897 case unParser p s of
9998 Right (a, s') -> Right (f a, s')
10099 Left err -> Left err
101−
102−instance Monad Parser where
103− return a = Parser $ \s -> Right (a, s)
104− m >>= f = Parser $ \s ->
105− case unParser m s of
106− Right (a, s') -> unParser (f a) s'
107− Left (s', msgs) -> Left (s', msgs)
108− fail err = Parser $ \(S sb lb _) -> Left (sb +: lb, [err])
100+{-# INLINE fmapP #-}
101+
102+returnP :: a -> Parser a
103+returnP a = Parser $ \s -> Right (a, s)
104+{-# INLINE returnP #-}
105+
106+bindP :: Parser a -> (a -> Parser b) -> Parser b
107+bindP m f = Parser $ \s ->
108+ case unParser m s of
109+ Right (a, s') -> unParser (f a) s'
110+ Left (s', msgs) -> Left (s', msgs)
111+{-# INLINE bindP #-}
112+
113+failP :: String -> Parser a
114+failP err = Parser $ \(S sb lb _) -> Left (sb +: lb, [err])
115+{-# INLINE failP #-}
109116
110117instance MonadFix Parser where
111118 mfix f = Parser $ \s ->
Data/Attoparsec/Word8Boilerplate.h+17−2
@@ -1,13 +1,28 @@
11-- -*- haskell -*-
22-- This file is intended to be #included by other source files.
33
4+instance Monad (PARSER) where
5+ return = returnP
6+ (>>=) = bindP
7+ fail = failP
8+
49instance MonadPlus (PARSER) where
510 mzero = zero
611 mplus = plus
712
13+apP :: PARSER (a -> b) -> PARSER a -> PARSER b
14+apP d e = do
15+ b <- d
16+ a <- e
17+ return (b a)
18+{-# INLINE apP #-}
19+
20+instance Functor (PARSER) where
21+ fmap = fmapP
22+
823instance Applicative (PARSER) where
9− pure = return
10− (<*>) = ap
24+ pure = returnP
25+ (<*>) = apP
1126
1227instance Alternative (PARSER) where
1328 empty = zero