@@ -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 ->