fold-debounce-conduit 0.2.0.6 → 0.2.0.7
raw patch · 4 files changed
+66/−55 lines, 4 filesdep ~basedep ~resourcetPVP ok
version bump matches the API change (PVP)
Dependency ranges changed: base, resourcet
API changes (from Hackage documentation)
Files
- ChangeLog.md +5/−0
- fold-debounce-conduit.cabal +3/−3
- src/Data/Conduit/FoldDebounce.hs +39/−37
- test/Data/Conduit/FoldDebounceSpec.hs +19/−15
ChangeLog.md view
@@ -1,5 +1,10 @@ # Revision history for fold-debounce-conduit +## 0.2.0.7 -- 2022-11-25++* Confirm test with `base-4.16.4.0` (ghc-9.2.5) and `resourcet-1.3.0`.+* Use stylish-haskell.+ ## 0.2.0.6 -- 2021-02-28 * Confirm test with `base-4.15.0.0` (ghc-9.0.1)
fold-debounce-conduit.cabal view
@@ -1,5 +1,5 @@ name: fold-debounce-conduit-version: 0.2.0.6+version: 0.2.0.7 author: Toshio Ito <debug.ito@gmail.com> maintainer: Toshio Ito <debug.ito@gmail.com> license: BSD3@@ -20,10 +20,10 @@ exposed-modules: Data.Conduit.FoldDebounce -- other-modules: default-extensions: FlexibleContexts- build-depends: base >=4.9.0 && <4.16,+ build-depends: base >=4.9.0 && <4.17, conduit >=1.3.0 && <1.4, fold-debounce >=0.2.0 && <0.3,- resourcet >=1.2.0 && <1.3,+ resourcet >=1.2.0 && <1.4, stm >=2.4.4.1 && <2.6, transformers >=0.5.2 && <0.6, transformers-base >=0.4.4 && <0.5
src/Data/Conduit/FoldDebounce.hs view
@@ -2,20 +2,20 @@ -- Module: Data.Conduit.FoldDebounce -- Description: Regulate input traffic from conduit Source with Control.FoldDebounce -- Maintainer: Toshio Ito <debug.ito@gmail.com>--- +-- -- Synopsis: -- -- > module Main (main) where--- > +-- > -- > import Data.Conduit (ConduitT, yield, runConduit, (.|)) -- > import qualified Data.Conduit.List as CL -- > import Data.Void (Void) -- > import Control.Concurrent (threadDelay) -- > import Control.Monad.IO.Class (liftIO) -- > import Control.Monad.Trans.Resource (ResourceT, runResourceT)--- > +-- > -- > import qualified Data.Conduit.FoldDebounce as F--- > +-- > -- > fastSource :: Int -> ConduitT () Int (ResourceT IO) () -- > fastSource max_num = fastStream' 0 where -- > fastStream' count = do@@ -25,10 +25,10 @@ -- > else do -- > liftIO $ threadDelay 100000 -- > fastStream' (count + 1)--- > +-- > -- > printSink :: Show a => ConduitT a Void (ResourceT IO) () -- > printSink = CL.mapM_ (liftIO . putStrLn . show)--- > +-- > -- > main :: IO () -- > main = do -- > putStrLn "-- Before debounce"@@ -39,7 +39,7 @@ -- > F.def { F.delay = 500000 } -- > putStrLn "-- After debounce" -- > runResourceT $ runConduit $ debouncer (fastSource 10) .| printSink--- +-- -- Result: -- -- > -- Before debounce@@ -68,35 +68,36 @@ -- (specified by 'delay' option). -- -- See "Control.FoldDebounce" for detail.-module Data.Conduit.FoldDebounce (- debounce,- -- * Re-exports- Args(..),- Opts,- def,- -- ** Accessors for 'Opts'- delay,- alwaysResetTimer,- -- * Preset parameters- forStack, forMonoid, forVoid-) where+module Data.Conduit.FoldDebounce+ ( debounce+ -- * Re-exports+ , Args (..)+ , Opts+ , def+ -- ** Accessors for 'Opts'+ , delay+ , alwaysResetTimer+ -- * Preset parameters+ , forStack+ , forMonoid+ , forVoid+ ) where -import Prelude hiding (init)-import Control.Monad (void)-import Data.Monoid (Monoid)-import Data.Void (Void)+import Control.Monad (void)+import Data.Monoid (Monoid)+import Data.Void (Void)+import Prelude hiding (init) -import Control.FoldDebounce (Args(Args,cb,fold,init),- Opts, delay, alwaysResetTimer, def)-import qualified Control.FoldDebounce as F-import Data.Conduit (ConduitT, await, (.|), bracketP, yield, runConduit)-import Control.Monad.Trans.Resource (MonadResource, MonadUnliftIO,- allocate, register, release, resourceForkIO, runResourceT)-import Control.Monad.Trans.Class (lift)-import Control.Monad.IO.Class (MonadIO, liftIO)-import Control.Concurrent.STM (newTChanIO, writeTChan, readTChan,- atomically,- TVar, readTVar, newTVarIO, writeTVar)+import Control.Concurrent.STM (TVar, atomically, newTChanIO, newTVarIO, readTChan,+ readTVar, writeTChan, writeTVar)+import Control.FoldDebounce (Args (Args, cb, fold, init), Opts, alwaysResetTimer,+ def, delay)+import qualified Control.FoldDebounce as F+import Control.Monad.IO.Class (MonadIO, liftIO)+import Control.Monad.Trans.Class (lift)+import Control.Monad.Trans.Resource (MonadResource, MonadUnliftIO, allocate, register,+ release, resourceForkIO, runResourceT)+import Data.Conduit (ConduitT, await, bracketP, runConduit, yield, (.|)) -- | Debounce conduit source with "Control.FoldDebounce". The data -- stream from the original source (type @i@) is debounced and folded@@ -130,10 +131,11 @@ case mgot of OutFinished -> return () OutData got -> yield got >> keepYield out_chan- + -- | Internal data type for output channel.-data OutData o = OutData o- | OutFinished+data OutData o+ = OutData o+ | OutFinished trigSink :: (MonadIO m) => F.Trigger i o -> TVar Bool -> ConduitT i Void m () trigSink trig out_termed = trigSink' where
test/Data/Conduit/FoldDebounceSpec.hs view
@@ -1,19 +1,23 @@-module Data.Conduit.FoldDebounceSpec (main, spec) where+module Data.Conduit.FoldDebounceSpec+ ( main+ , spec+ ) where -import Test.Hspec+import Test.Hspec -import Control.Applicative ((<$>))-import Control.Concurrent (threadDelay, myThreadId)-import Control.Concurrent.STM (atomically, TVar, newTVarIO, writeTVar, readTVar, retry)-import Control.Monad (forM_, void)-import Control.Monad.IO.Class (liftIO)-import Control.Monad.Trans.Resource (ResourceT, runResourceT, register)-import Data.Conduit (ConduitT, (.|), yield, bracketP, runConduit)-import qualified Data.Conduit.FoldDebounce as F-import qualified Data.Conduit.List as CL-import Data.Maybe (isJust)-import Data.Monoid (Monoid)-import System.Timeout (timeout)+import Control.Applicative ((<$>))+import Control.Concurrent (myThreadId, threadDelay)+import Control.Concurrent.STM (TVar, atomically, newTVarIO, readTVar, retry,+ writeTVar)+import Control.Monad (forM_, void)+import Control.Monad.IO.Class (liftIO)+import Control.Monad.Trans.Resource (ResourceT, register, runResourceT)+import Data.Conduit (ConduitT, bracketP, runConduit, yield, (.|))+import qualified Data.Conduit.FoldDebounce as F+import qualified Data.Conduit.List as CL+import Data.Maybe (isJust)+import Data.Monoid (Monoid)+import System.Timeout (timeout) main :: IO () main = hspec spec@@ -142,4 +146,4 @@ ret `shouldBe` ["ab"] released `shouldSatisfyEventually'` (== True) - +