packages feed

vector-builder 0.3.7.1 → 0.3.7.2

raw patch · 3 files changed

+50/−12 lines, 3 filesPVP: minor bump suggested

API additions: PVP suggests at least a minor version bump

API changes (from Hackage documentation)

+ VectorBuilder.MonadPlus: many1 :: (MonadPlus m, Vector vector element) => m element -> m (vector element)
+ VectorBuilder.MonadPlus: manyBuilder :: MonadPlus m => m element -> m (Builder element)

Files

library/VectorBuilder/MonadPlus.hs view
@@ -15,16 +15,28 @@ {-# INLINABLE many #-} many :: (MonadPlus m, C.Vector vector element) => m element -> m (vector element) many m =-  liftM B.build loop+  liftM B.build (manyBuilder m)++{-# INLINABLE manyBuilder #-}+manyBuilder :: (MonadPlus m) => m element -> m (A.Builder element)+manyBuilder m =+  loop mempty   where-    loop =+    loop !builder =       mplus         (do           !element <- m-          remainders <- loop-          return (A.singleton element <> remainders))-        (return mempty)+          loop (builder <> A.singleton element))+        (return builder) +{-# INLINABLE many1 #-}+many1 :: (MonadPlus m, C.Vector vector element) => m element -> m (vector element)+many1 m =+  do+    firstElement <- m+    builder <- manyBuilder m+    return (B.build (A.singleton firstElement <> builder))+ {-# INLINABLE sepBy #-} sepBy :: (MonadPlus m, C.Vector vector element) => m element -> m separator -> m (vector element) sepBy elementM separatorM =@@ -33,10 +45,15 @@ {-# INLINABLE sepBy1 #-} sepBy1 :: (MonadPlus m, C.Vector vector element) => m element -> m separator -> m (vector element) sepBy1 elementM separatorM =-  liftM B.build loop+  do+    firstElement <- elementM+    builder <- loop (A.singleton firstElement)+    return (B.build builder)   where-    loop =-      do-        !element <- elementM-        remainders <- mplus (separatorM >> loop) (return mempty)-        return (A.singleton element <> remainders)+    loop builder =+      mplus+        (do+          separatorM+          !element <- elementM+          loop (builder <> A.singleton element))+        (return builder)
tests/Main.hs view
@@ -8,9 +8,11 @@ import qualified VectorBuilder.Builder as A import qualified VectorBuilder.Vector as B import qualified VectorBuilder.Alternative as F+import qualified VectorBuilder.MonadPlus as H import qualified Main.Sample as C import qualified Data.Attoparsec.Text as D import qualified Data.Vector as E+import qualified Data.Text as G   main =@@ -36,5 +38,24 @@     testProperty "foldable" $ \(elements :: [Int]) ->       E.fromList elements ===       B.build (A.foldable elements)+    ,+    testGroup "MonadPlus"+    [+      testProperty "many" $ \(elements :: [Char]) ->+        Right (E.fromList elements) ===+        D.parseOnly (H.many D.anyChar) (fromString elements)+      ,+      testProperty "many1" $ \(elements :: [Char]) ->+        (if null elements+          then Left "not enough input"+          else Right (E.fromList elements)) ===+        D.parseOnly (H.many1 D.anyChar) (fromString elements)+      ,+      testProperty "sepBy1" $ \(elements :: [Char]) ->+        (if null elements+          then Left "not enough input"+          else Right (E.fromList elements)) ===+        D.parseOnly (H.sepBy1 D.anyChar (D.char ',')) (G.intersperse ',' (fromString elements))+    ]   ] 
vector-builder.cabal view
@@ -1,7 +1,7 @@ name:   vector-builder version:-  0.3.7.1+  0.3.7.2 synopsis:   Vector builder description: