git.iko.soy/typeable/attoparsec
on master help sign in
Add a parseOnly entry point, at Daniel Fischer's request
9330e6bBryan O'Sullivan
Data/Attoparsec.hs+1
@@ -28,6 +28,7 @@ module Data.Attoparsec
28 -- * Running parsers
28 -- * Running parsers
29 , parse
29 , parse
30 , feed
30 , feed
31+ , I.parseOnly
31 , parseWith
32 , parseWith
32 , parseTest
33 , parseTest
33
34
Data/Attoparsec/Internal.hs+11
@@ -19,6 +19,7 @@ module Data.Attoparsec.Internal
19
19
20 -- * Running parsers
20 -- * Running parsers
21 , parse
21 , parse
22+ , parseOnly
22
23
23 -- * Combinators
24 -- * Combinators
24 , (<?>)
25 , (<?>)
@@ -560,12 +561,22 @@ infix 0 <?>
560-- | Terminal failure continuation.
561-- | Terminal failure continuation.
561failK :: Failure a
562failK :: Failure a
562failK i0 _a0 _m0 stack msg = Fail (unI i0) stack msg
563failK i0 _a0 _m0 stack msg = Fail (unI i0) stack msg
564+{-# INLINE failK #-}
563
565
564-- | Terminal success continuation.
566-- | Terminal success continuation.
565successK :: Success a a
567successK :: Success a a
566successK i0 _a0 _m0 a = Done (unI i0) a
568successK i0 _a0 _m0 a = Done (unI i0) a
569+{-# INLINE successK #-}
567
570
568-- | Run a parser.
571-- | Run a parser.
569parse :: Parser a -> B.ByteString -> Result a
572parse :: Parser a -> B.ByteString -> Result a
570parse m s = runParser m (I s) (A B.empty) Incomplete failK successK
573parse m s = runParser m (I s) (A B.empty) Incomplete failK successK
571{-# INLINE parse #-}
574{-# INLINE parse #-}
575+
576+-- | Run a parser that cannot be resupplied via a 'Partial' result.
577+parseOnly :: Parser a -> B.ByteString -> Either String a
578+parseOnly m s = case runParser m (I s) (A B.empty) Complete failK successK of
579+ Fail _ _ err -> Left err
580+ Done _ a -> Right a
581+ _ -> error "parseOnly: impossible error!"
582+{-# INLINE parseOnly #-}