scc 0.8.2 → 0.8.2.1
raw patch · 7 files changed
+52/−47 lines, 7 filesdep +transformers-compatdep ~monad-coroutinedep ~monoid-subclassesdep ~textPVP: major bump suggested
API removals or changes: PVP suggests a major version bump
Dependencies added: transformers-compat
Dependency ranges changed: monad-coroutine, monoid-subclasses, text, transformers
API changes (from Hackage documentation)
- Control.Concurrent.SCC.Streams: type SinkFunctor a x = EitherFunctor a (Request x x)
+ Control.Concurrent.SCC.Streams: type SinkFunctor a x = Sum a (Request x x)
- Control.Concurrent.SCC.Streams: type SourceFunctor a x = EitherFunctor a (ReadRequest x)
+ Control.Concurrent.SCC.Streams: type SourceFunctor a x = Sum a (ReadRequest x)
Files
- Control/Concurrent/SCC/Combinators.hs +1/−1
- Control/Concurrent/SCC/Configurable.hs +1/−1
- Control/Concurrent/SCC/Streams.hs +6/−5
- Makefile +7/−4
- Shell.hs +2/−0
- Test/TestSCC.hs +21/−20
- scc.cabal +14/−16
Control/Concurrent/SCC/Combinators.hs view
@@ -73,7 +73,7 @@ ) where -import Prelude hiding (drop, even, last, length, map, null, sequence)+import Prelude hiding (drop, even, join, last, length, map, null, sequence) import Control.Monad (liftM, void, when) import Control.Monad.Trans.Class (lift) import Data.Maybe (isJust, mapMaybe)
Control/Concurrent/SCC/Configurable.hs view
@@ -30,7 +30,7 @@ ) where -import Prelude hiding (appendFile, even, id, last, sequence, (||), (&&))+import Prelude hiding (appendFile, even, id, join, last, sequence, (||), (&&)) import qualified Control.Category import Data.Text (Text) import Data.Monoid (Monoid, Sum)
Control/Concurrent/SCC/Streams.hs view
@@ -80,6 +80,7 @@ import qualified Control.Monad import Control.Monad (liftM, when, unless, foldM) import Data.Functor.Identity (Identity(..))+import Data.Functor.Sum (Sum(InR)) import Data.Monoid (Monoid(mappend, mconcat, mempty), First(First, getFirst)) import Data.Monoid.Factorial (FactorialMonoid, foldl, foldMap, mapM, mapM_, span, primePrefix, splitPrimePrefix) import Data.Monoid.Null (MonoidNull(null))@@ -94,10 +95,10 @@ ReadRequest, requestRead, Reader, Reading(..), ReadingResult(..), weaveNestedReadWriteRequests)-import Control.Monad.Coroutine.Nested (EitherFunctor(..), AncestorFunctor(..), liftAncestor)+import Control.Monad.Coroutine.Nested (AncestorFunctor(..), liftAncestor) -type SourceFunctor a x = EitherFunctor a (ReadRequest x)-type SinkFunctor a x = EitherFunctor a (Request x x)+type SourceFunctor a x = Sum a (ReadRequest x)+type SinkFunctor a x = Sum a (Request x x) -- | A 'Sink' can be used to yield output from any nested `Coroutine` computation whose functor provably descends from -- the functor /a/. It's the write-only end of a communication channel created by 'pipe'.@@ -184,10 +185,10 @@ pipeG run2 producer consumer = liftM (uncurry (flip (,))) $ weave run2 weaveNestedReadWriteRequests (consumer source) (producer sink)- where sink = Sink {putChunk= \xs-> liftAncestor (mapSuspension RightF (request xs) :: Coroutine a1 m x)}+ where sink = Sink {putChunk= \xs-> liftAncestor (mapSuspension InR (request xs) :: Coroutine a1 m x)} source = Source {readChunk= fc} fc :: forall d py y. AncestorFunctor a2 d => Reader x py y -> Coroutine d m (ReadingResult x py y)- fc t = liftAncestor (mapSuspension RightF (requestRead t) :: Coroutine a2 m (ReadingResult x py y))+ fc t = liftAncestor (mapSuspension InR (requestRead t) :: Coroutine a2 m (ReadingResult x py y)) fromParser :: forall p x y. Monoid x => y -> Parser p x y -> Reader x (y -> y) y fromParser failure p s = case inspect (feed s p)
Makefile view
@@ -2,8 +2,10 @@ TestExecutables=$(addprefix test/, scc parallel benchmark-coroutine incremental-parser monoid-subclasses \ enumerator iteratee) IncrementalParserFiles=Text/ParserCombinators/Incremental.hs Control/Applicative/Monoid.hs $(MonoidSubclassFiles)-MonoidSubclassFiles=$(addprefix Data/Monoid/, Cancellative.hs Factorial.hs Null.hs Textual.hs \- Instances/ByteString/UTF8.hs)+MonoidSubclassFiles=$(addsuffix .hs, \+ $(addprefix Data/Monoid/, Cancellative Factorial Null Textual))+MonoidInstanceFiles=$(addsuffix .hs, \+ $(addprefix Data/Monoid/Instances/, ByteString/UTF8 Concat Measured Positioned Stateful)) CoroutineLibraryFiles=$(IncrementalParserFiles) \ $(addprefix Control/Monad/, \ Parallel.hs Coroutine.hs Coroutine/SuspensionFunctors.hs Coroutine/Nested.hs)@@ -34,8 +36,9 @@ test/incremental-parser: Test/TestIncrementalParser.hs $(IncrementalParserFiles) | obj test ghc --make $< -o $@ $(OptimizingOptions) -eventlog -test/monoid-subclasses: Test/TestMonoidSubclasses.hs $(MonoidSubclassFiles) | obj test- ghc --make $< -o $@ $(OptimizingOptions) -eventlog -hide-package checkers -package quickcheck-instances+test/monoid-subclasses: Test/TestMonoidSubclasses.hs $(MonoidSubclassFiles) $(MonoidInstanceFiles) | obj test+ ghc --make $< -o $@ $(OptimizingOptions) -eventlog -hide-package checkers -package quickcheck-instances \+ -cpp -D'MIN_VERSION_containers(x,y,z)=1' test/enumerator: Test/TestEnumerator.hs $(CoroutineLibraryFiles) Control/Monad/Coroutine/Enumerator.hs | obj test ghc --make $< -o $@ $(OptimizingOptions) -eventlog
Shell.hs view
@@ -474,10 +474,12 @@ showHelp = putStrLn (usageInfo usageSyntax flagList) +interact :: Flags -> InputT IO () interact options = do Just command <- getInputLine "> " finish <- lift $ interpret options command when (not finish) (interact options) +interpret :: Flags -> String -> IO Bool interpret options command = case parseExpression command of Left position -> hPutStrLn stderr ("Error at " ++ show position) >> return False Right (Exit, "", _) -> return True
Test/TestSCC.hs view
@@ -584,26 +584,27 @@ splitterFromTrace :: SplitterTrace -> SplitterComponent Identity [x] splitterFromTrace trace = atomic "splitterFromTrace" 1 (splitterFromTrace' trace) -splitterFromTrace' :: SplitterTrace -> Splitter Identity [x]-splitterFromTrace' trace1- = Splitter $- \source true false->- let follow previous trace2@(head:tail) q = get source >>= maybe fail succeed- where succeed x = let q' = q |> x- in case head- of Nothing -> follow previous tail q'- Just Nothing -> when (not previous) (putChunk true [] >> return ())- >> follow False tail q'- Just (Just True) -> when (not previous) (putChunk true [] >> return ())- >> putAll (Foldable.toList (Seq.viewl q')) true- >> follow True tail Seq.empty- Just (Just False) -> putAll (Foldable.toList (Seq.viewl q')) false- >> follow False tail Seq.empty- fail = if find (maybe False isJust) trace2 == Just (Just (Just True))- then putAll (Foldable.toList (Seq.viewl q)) true- else putAll (Foldable.toList (Seq.viewl q)) false- in follow False (cycle (fst trace1 ++ [Just (Just $ snd trace1)])) Seq.empty - >> return ()+splitterFromTrace' :: forall x. SplitterTrace -> Splitter Identity [x]+splitterFromTrace' trace1 = isolateSplitter s+ where s :: forall d. Functor d => Source Identity d [x] -> Sink Identity d [x] -> Sink Identity d [x] -> Coroutine d Identity ()+ s source true false =+ let follow :: Bool -> [Maybe (Maybe Bool)] -> Seq x -> Coroutine d Identity [x]+ follow previous trace2@(head:tail) q = get source >>= maybe fail succeed+ where succeed x = let q' = q |> x+ in case head+ of Nothing -> follow previous tail q'+ Just Nothing -> when (not previous) (putChunk true [] >> return ())+ >> follow False tail q'+ Just (Just True) -> when (not previous) (putChunk true [] >> return ())+ >> putAll (Foldable.toList (Seq.viewl q')) true+ >> follow True tail Seq.empty+ Just (Just False) -> putAll (Foldable.toList (Seq.viewl q')) false+ >> follow False tail Seq.empty+ fail = if find (maybe False isJust) trace2 == Just (Just (Just True))+ then putAll (Foldable.toList (Seq.viewl q)) true+ else putAll (Foldable.toList (Seq.viewl q)) false+ in follow False (cycle (fst trace1 ++ [Just (Just $ snd trace1)])) Seq.empty + >> return () swap :: (x, y) -> (y, x) swap (x, y) = (y, x)
scc.cabal view
@@ -1,10 +1,10 @@ Name: scc-Version: 0.8.2+Version: 0.8.2.1 Cabal-Version: >= 1.10 Build-Type: Simple Synopsis: Streaming component combinators Category: Control, Combinators, Concurrency-Tested-with: GHC == 7.4, GHC == 7.6+Tested-with: GHC == 7.4, GHC == 7.6, GHC == 7.8 Description: SCC is a layered library of Streaming Component Combinators. The lowest layer in "Control.Concurent.SCC.Streams" defines stream abstractions and nested producer-consumer coroutine pairs based on the Coroutine monad transformer.@@ -25,18 +25,16 @@ Source-repository head type: darcs location: http://code.haskell.org/SCC/-Flag Test- Description: Install QuickCheck test suite- Default: False Executable shsh Main-is: Shell.hs Other-Modules: Control.Concurrent.SCC.Streams, Control.Concurrent.SCC.Types, Control.Concurrent.SCC.Coercions, Control.Concurrent.SCC.Combinators, Control.Concurrent.SCC.Primitives, Control.Concurrent.SCC.XML, Control.Concurrent.Configuration, Control.Concurrent.SCC.Configurable- Build-Depends: base < 5, containers, transformers >= 0.2 && < 0.4, bytestring < 1.0, text < 1.0,- monoid-subclasses >= 0.2 && < 0.4, incremental-parser >= 0.2.2 && < 0.3,- monad-parallel, monad-coroutine == 0.8.*,+ Build-Depends: base < 5, containers,+ transformers >= 0.2 && < 0.5, transformers-compat >= 0.3 && < 0.4, bytestring < 1.0, text < 1.3,+ monoid-subclasses >= 0.2 && < 0.5, incremental-parser >= 0.2.2 && < 0.3,+ monad-parallel, monad-coroutine == 0.9.*, process, haskeline, parsec == 3.* GHC-options: -threaded if impl(ghc >= 7.0.0)@@ -50,13 +48,12 @@ Control.Concurrent.SCC.Combinators, Control.Concurrent.SCC.Primitives, Control.Concurrent.SCC.XML, Control.Concurrent.Configuration, Control.Concurrent.SCC.Configurable- Build-Depends: base < 5, containers, transformers >= 0.2 && < 0.4, bytestring < 1.0, text < 1.0,- monoid-subclasses >= 0.2 && < 0.4, incremental-parser >= 0.2.2 && < 0.3,- monad-parallel, monad-coroutine == 0.8.*,+ Build-Depends: base < 5, containers,+ transformers >= 0.2 && < 0.5, transformers-compat >= 0.3 && < 0.4, bytestring < 1.0, text < 1.3,+ monoid-subclasses >= 0.2 && < 0.5, incremental-parser >= 0.2.2 && < 0.3,+ monad-parallel, monad-coroutine == 0.9.*, QuickCheck >= 2 && < 3, test-framework >= 0.4.1, test-framework-quickcheck2 GHC-options: -threaded -fcontext-stack=30- if !flag(test)- buildable: False if impl(ghc >= 7.0.0) default-language: Haskell2010 @@ -67,9 +64,10 @@ Other-Modules: Control.Concurrent.Configuration, Control.Concurrent.SCC.Coercions, Control.Concurrent.SCC.Combinators.Parallel, Control.Concurrent.SCC.Combinators.Sequential, Control.Concurrent.SCC.Combinators, Control.Concurrent.SCC.Primitives, Control.Concurrent.SCC.XML- Build-Depends: base < 5, containers, transformers >= 0.2 && < 0.4, bytestring < 1.0, text < 1.0,- monoid-subclasses >= 0.2 && < 0.4, incremental-parser >= 0.2.2 && < 0.3,- monad-parallel, monad-coroutine == 0.8.*+ Build-Depends: base < 5, containers,+ transformers >= 0.2 && < 0.5, transformers-compat >= 0.3 && < 0.4, bytestring < 1.0, text < 1.3,+ monoid-subclasses >= 0.2 && < 0.5, incremental-parser >= 0.2.2 && < 0.3,+ monad-parallel, monad-coroutine == 0.9.* GHC-prof-options: -auto-all if impl(ghc >= 7.0.0) default-language: Haskell2010