incremental-parser 0.2.5.4 → 0.3
raw patch · 4 files changed
+31/−16 lines, 4 filesdep ~base
Dependency ranges changed: base
Files
- Control/Applicative/Monoid.hs +4/−3
- Test/TestIncrementalParser.hs +13/−3
- Text/ParserCombinators/Incremental.hs +10/−6
- incremental-parser.cabal +4/−4
Control/Applicative/Monoid.hs view
@@ -1,5 +1,5 @@ {-- Copyright 2011-2015 Mario Blazevic+ Copyright 2011-2018 Mario Blazevic This file is part of the Streaming Component Combinators (SCC) project. @@ -25,6 +25,7 @@ import Control.Applicative (Applicative (pure, (<*>)), Alternative ((<|>), some, many), (<$>)) import Data.Monoid (Monoid, mempty, mappend, mconcat)+import Data.Semigroup (Semigroup, (<>)) class Applicative f => MonoidApplicative f where@@ -35,8 +36,8 @@ -- | Lifted and potentially optimized monoid `mappend` operation from the parameter type. infixl 5 ><- (><) :: Monoid a => f a -> f a -> f a- a >< b = mappend <$> a +<*> b+ (><) :: Semigroup a => f a -> f a -> f a+ a >< b = (<>) <$> a +<*> b class (Alternative f, MonoidApplicative f) => MonoidAlternative f where -- | Like 'optional', but restricted to 'Monoid' results.
Test/TestIncrementalParser.hs view
@@ -1,5 +1,5 @@ {- - Copyright 2011-2015 Mario Blazevic+ Copyright 2011-2018 Mario Blazevic This file is part of the Streaming Component Combinators (SCC) project. @@ -24,6 +24,7 @@ import Control.Monad (MonadPlus, liftM, liftM2, mzero, mplus) import Data.List (find, minimumBy, nub, sort) import Data.Monoid (Monoid(..))+import Data.Semigroup (Semigroup(..)) import System.Environment (getArgs) import Test.Tasty.QuickCheck (Arbitrary(..), Gen, Property, property, (==>), (.&&.), forAll, oneof, resize, sized, whenFail)@@ -57,13 +58,19 @@ instance (Arbitrary r, Monoid r, Show r) => Arbitrary (TestParser a r) where arbitrary = fmap TestParser arbitrary +instance Semigroup a => Semigroup (Described a) where+ Described d1 p1 <> Described d2 p2 = Described (d1 ++ " <> " ++ d2) (p1 <> p2)+ instance Monoid a => Monoid (Described a) where mempty = Described "mempty" mempty- Described d1 p1 `mappend` Described d2 p2 = Described (d1 ++ " `mappend` " ++ d2) (mappend p1 p2)+ mappend = (<>) +instance Semigroup r => Semigroup (TestParser a r) where+ TestParser d1 <> TestParser d2 = TestParser (d1 <> d2)+ instance Monoid r => Monoid (TestParser a r) where mempty = TestParser mempty- TestParser d1 `mappend` TestParser d2 = TestParser (d1 `mappend` d2)+ mappend = (<>) instance EqProp a => EqProp (Described a) where Described _ x =-= Described _ y = x =-= y@@ -271,6 +278,9 @@ instance (Monoid r, Show r) => Show (Parser a [Bool] r) where show p = showWith (showBoolFun show) show p++instance Semigroup Bool where+ (<>) = (||) instance Monoid Bool where mempty = False
Text/ParserCombinators/Incremental.hs view
@@ -1,5 +1,5 @@ {-- Copyright 2010-2015 Mario Blazevic+ Copyright 2010-2018 Mario Blazevic This file is part of the Streaming Component Combinators (SCC) project. @@ -50,7 +50,8 @@ import Control.Applicative.Monoid(MonoidApplicative(..), MonoidAlternative(..)) import Control.Monad (ap) import Data.Maybe (fromMaybe)-import Data.Monoid (Monoid, mempty, mappend, (<>))+import Data.Semigroup (Semigroup(..))+import Data.Monoid (Monoid, mempty, mappend) import Data.Monoid.Cancellative (LeftReductiveMonoid (stripPrefix)) import Data.Monoid.Factorial (FactorialMonoid (splitPrimePrefix), span) import Data.Monoid.Null (MonoidNull(null))@@ -164,16 +165,19 @@ p1 >< p2 | isInfallible p2 = appendIncremental p1 p2 | otherwise = append p1 p2 -appendIncremental :: (Monoid s, Monoid r) => Parser t s r -> Parser t s r -> Parser t s r-appendIncremental (Result s r) p = resultPart (mappend r) (feed s p)+appendIncremental :: (Monoid s, Semigroup r) => Parser t s r -> Parser t s r -> Parser t s r+appendIncremental (Result s r) p = resultPart (<> r) (feed s p) appendIncremental (ResultPart r e f) p2 = ResultPart r (appendIncremental e p2) (flip appendIncremental p2 . f) appendIncremental p1 p2 = apply (`appendIncremental` p2) p1 -append :: (Monoid s, Monoid r) => Parser t s r -> Parser t s r -> Parser t s r-append (Result s r) p2 = prepend (mappend r) (feed s p2)+append :: (Monoid s, Semigroup r) => Parser t s r -> Parser t s r -> Parser t s r+append (Result s r) p2 = prepend (<> r) (feed s p2) append p1 p2 = apply (`append` p2) p1 -- | Two parsers can be sequentially joined.+instance (Monoid s, Semigroup r) => Semigroup (Parser t s r) where+ (<>) = (><)+ instance (Monoid s, Monoid r) => Monoid (Parser t s r) where mempty = return mempty mappend = (><)
incremental-parser.cabal view
@@ -1,5 +1,5 @@ Name: incremental-parser-Version: 0.2.5.4+Version: 0.3 Cabal-Version: >= 1.10 Build-Type: Simple Synopsis: Generic parser library capable of providing partial results from partial input.@@ -28,7 +28,7 @@ Exposed-Modules: Text.ParserCombinators.Incremental, Text.ParserCombinators.Incremental.LeftBiasedLocal, Text.ParserCombinators.Incremental.Symmetric, Control.Applicative.Monoid- Build-Depends: base < 4.11, monoid-subclasses < 0.5+ Build-Depends: base < 5, monoid-subclasses < 0.5 if impl(ghc >= 7.0.0) default-language: Haskell2010 @@ -36,7 +36,7 @@ Type: exitcode-stdio-1.0 x-uses-tf: true Default-Language: Haskell2010- Build-Depends: base < 4.11, monoid-subclasses < 0.5,+ Build-Depends: base < 5, monoid-subclasses < 0.5, QuickCheck >= 2 && < 3, checkers >= 0.3.2 && < 0.5, tasty >= 0.7 && < 1.1, tasty-quickcheck >= 0.7 && < 1.0 Main-is: Test/TestIncrementalParser.hs@@ -50,5 +50,5 @@ hs-source-dirs: Benchmarks ghc-options: -O2 -Wall -rtsopts main-is: CSV.hs- Build-Depends: base < 4.11, monoid-subclasses < 0.5, incremental-parser,+ Build-Depends: base < 5, monoid-subclasses < 0.5, incremental-parser, bytestring >= 0.10.4.0, criterion >= 1.0, deepseq >= 1.1, text >= 1.1.1.0