nanoparsec 0.1 → 0.1.1
raw patch · 3 files changed
+34/−2 lines, 3 filesdep ~basePVP ok
version bump matches the API change (PVP)
Dependency ranges changed: base
API changes (from Hackage documentation)
+ Data.Nanoparsec: (.*>) :: Monoid δ => Parser δ δ -> Parser δ a -> Parser δ a
+ Data.Nanoparsec: (<*.) :: Monoid δ => Parser δ a -> Parser δ δ -> Parser δ a
Files
- Data/Nanoparsec.hs +27/−0
- Data/Nanoparsec/Internal.hs +5/−0
- nanoparsec.cabal +2/−2
Data/Nanoparsec.hs view
@@ -62,9 +62,15 @@ -- * State observation and manipulation functions , I.endOfInput , I.ensure++ -- * Applicative specializations+ -- $applicative+ , (<*.)+ , (.*>) ) where +import Control.Applicative import qualified Data.ByteString as B import qualified Data.ByteString.Lazy as LB import Data.Monoid@@ -219,3 +225,24 @@ eitherResult (Done _ r) = Right r eitherResult (Fail _ _ msg) = Left msg eitherResult _ = Left "Result: incomplete input"++-- $applicative+--+-- We provide specializations of @\<*@ and @*\>@ as @\<*.@ and+-- @.*\>@, respectively. Together with @IsString@ instance of+-- 'I.Parser', you may write parsers applicatively more easily.+-- For example:+--+-- > paren p = "(" .*> p <*. ")"+--+-- instead of the more verbose+--+-- > paren p = string "(" *> p <* string ")"++-- | Same as @Applicative@'s @\<*@ but specialized.+(<*.) :: Monoid δ ⇒ I.Parser δ a → I.Parser δ δ → I.Parser δ a+(<*.) = (<*)++-- | Same as @Applicative@'s @*\>@ but specialized.+(.*>) :: Monoid δ ⇒ I.Parser δ δ → I.Parser δ a → I.Parser δ a+(.*>) = (*>)
Data/Nanoparsec/Internal.hs view
@@ -1,5 +1,7 @@ {-# LANGUAGE BangPatterns #-}+{-# LANGUAGE FlexibleInstances #-} {-# LANGUAGE RankNTypes #-}+{-# LANGUAGE UndecidableInstances #-} {-# LANGUAGE UnicodeSyntax #-} {-| Module : Data.Nanoparsec.Internal@@ -54,6 +56,7 @@ import qualified Data.ByteString as B import qualified Data.ByteString.Lazy as LB import Data.Monoid+import Data.String import qualified Data.ListLike as LL import Data.Word import Prelude hiding (take, takeWhile, elem, notElem)@@ -201,6 +204,8 @@ {-# SPECIALIZE mplus ∷ Parser B.ByteString a → Parser B.ByteString a → Parser B.ByteString a #-} {-# SPECIALIZE mplus ∷ Parser LB.ByteString a → Parser LB.ByteString a → Parser LB.ByteString a #-} +instance (Eq δ, LL.ListLike δ ε, IsString δ) ⇒ IsString (Parser δ δ) where+ fromString = string . fromString noAdds ∷ Monoid δ ⇒ S δ → S δ noAdds (S s _ c) = S s ø c
nanoparsec.cabal view
@@ -1,5 +1,5 @@ Name: nanoparsec-Version: 0.1+Version: 0.1.1 Synopsis: An implementation of attoparsec-like parser around list-like Description: An implementation of attoparsec-like parser around list-like License: BSD3@@ -15,7 +15,7 @@ Exposed-modules: Data.Nanoparsec, Data.Nanoparsec.Combinator Other-modules: Data.Nanoparsec.Internal- Build-depends: base >= 4.3 && < 5,+ Build-depends: base >= 4.0 && < 5, bytestring == 0.9.*, ListLike == 2.0.* Ghc-options: -Wall -O2