module Data.Repa.Flow.Chunked ( module Data.Repa.Flow.States , Sources, Sinks , Flow -- * Evaluation , drainS , consumeS -- * Conversion , fromList , fromLists , toList1 , toLists1 -- * Finalizers , finalize_i, finalize_o -- * Flow Operators -- ** Replicate , replicates_i -- ** Mapping -- | If you want to work on a chunk at a time then use -- `Data.Repa.Flow.Generic.map_i` and -- `Data.Repa.Flow.Generic.map_o` from "Data.Repa.Flow.Generic". , smap_i, smap_o , szipWith_ii -- ** Processing , process_i -- ** Unfolding , unfolds_i , StepUnfold (..) -- ** Splitting , head_i -- ** Grouping , groupsBy_i, GroupsDict -- ** Folding , foldlS, foldlAllS , folds_i, FoldsDict -- ** Watching , watch_i, watch_o , trigger_o -- ** Ignorance , ignore_o , abandon_o) where import Data.Repa.Flow.Chunked.Base import Data.Repa.Flow.Chunked.Map import Data.Repa.Flow.Chunked.Fold import Data.Repa.Flow.Chunked.Folds import Data.Repa.Flow.Chunked.Generic import Data.Repa.Flow.Chunked.Groups import Data.Repa.Flow.Chunked.Process import Data.Repa.Flow.Chunked.Replicate import Data.Repa.Flow.States import qualified Data.Repa.Array.Generic as A import qualified Data.Repa.Flow.Generic as G #include "repa-flow.h" -- | Pull all available values from the sources and push them to the sinks. drainS :: (Next i, Monad m) => Sources i m r a -> Sinks i m r a -> m () drainS = G.drainS {-# INLINE drainS #-} -- | Pull all available values from the sources and pass them to the given action. consumeS :: (Next i, Monad m, A.Bulk r a) => Sources i m r a -> (i -> a -> m ()) -> m () consumeS ss eatElem = G.consumeS eatChunk ss where eatChunk ix arr = mapM_ (eatElem ix) $ A.toList arr {-# INLINE eatChunk #-} {-# INLINE consumeS #-}