potoki 0.10.2 → 0.10.3
raw patch · 4 files changed
+36/−3 lines, 4 filesPVP ok
version bump matches the API change (PVP)
API changes (from Hackage documentation)
+ Potoki.Transform: vector :: Transform (Vector a) a
Files
- library/Potoki/Fetch.hs +11/−0
- library/Potoki/Transform.hs +19/−0
- library/Potoki/Transform/Concurrency.hs +5/−2
- potoki.cabal +1/−1
library/Potoki/Fetch.hs view
@@ -85,3 +85,14 @@ finiteMVar var = Fetch $ \ nil just -> fmap (maybe nil just) (takeMVar var)++{-# INLINABLE vector #-}+vector :: IORef Int -> Vector element -> Fetch element+vector indexRef vector =+ Fetch $ \ nil just -> do+ index <- readIORef indexRef+ if index < C.length vector+ then do+ writeIORef indexRef (succ index)+ return (just (C.unsafeIndex vector index))+ else return nil
library/Potoki/Transform.hs view
@@ -12,6 +12,7 @@ filter, just, list,+ vector, distinctBy, distinct, builderChunks,@@ -46,6 +47,7 @@ import qualified Data.ByteString.Builder as E import qualified Data.ByteString.Lazy as F import qualified Data.ByteString as J+import qualified Data.Vector as P import qualified System.Directory as I import qualified Control.Concurrent.Chan.Unagi.Bounded as B import qualified Control.Monad.Trans.State.Strict as O@@ -244,6 +246,23 @@ return nil in join (fetchListIO nilIO justIO) in fetchElementIO++vector :: Transform (Vector a) a+vector =+ Transform $ \ (A.Fetch fetchVectorIO) -> do+ indexRef <- newIORef 0+ vectorRef <- newIORef mempty+ return $ A.Fetch $ \ nil just -> fix $ \ loop -> do+ vector <- readIORef vectorRef+ index <- readIORef indexRef+ if index < P.length vector+ then do+ writeIORef indexRef (succ index)+ return (just (P.unsafeIndex vector index))+ else join $ fetchVectorIO (return nil) $ \ vector -> do+ writeIORef vectorRef vector+ writeIORef indexRef 0+ loop {-| Useful for debugging
library/Potoki/Transform/Concurrency.hs view
@@ -55,8 +55,11 @@ {-# INLINABLE concurrently #-} concurrently :: Int -> Transform input output -> Transform input output concurrently workersAmount transform =- sync >>>- concurrentlyUnsafe workersAmount transform+ if workersAmount == 1+ then transform+ else+ sync >>>+ concurrentlyUnsafe workersAmount transform {-# INLINE concurrentlyUnsafe #-} concurrentlyUnsafe :: Int -> Transform input output -> Transform input output
potoki.cabal view
@@ -1,7 +1,7 @@ name: potoki version:- 0.10.2+ 0.10.3 synopsis: Simple streaming in IO description: