deferred-folds 0.6.1 → 0.6.2
raw patch · 3 files changed
+69/−7 lines, 3 filesdep ~basePVP ok
version bump matches the API change (PVP)
Dependency ranges changed: base
API changes (from Hackage documentation)
+ DeferredFolds.UnfoldM: tVarValue :: TVar a -> UnfoldM STM a
Files
- deferred-folds.cabal +1/−1
- library/DeferredFolds/Prelude.hs +58/−6
- library/DeferredFolds/UnfoldM.hs +10/−0
deferred-folds.cabal view
@@ -1,7 +1,7 @@ name: deferred-folds version:- 0.6.1+ 0.6.2 category: Folding synopsis:
library/DeferredFolds/Prelude.hs view
@@ -7,16 +7,68 @@ -- base --------------------------import Prelude as Exports hiding ((<>))-import Foreign as Exports hiding (void)+import Control.Applicative as Exports+import Control.Arrow as Exports+import Control.Category as Exports+import Control.Concurrent as Exports+import Control.Exception as Exports+import Control.Monad as Exports hiding (mapM_, sequence_, forM_, msum, mapM, sequence, forM)+import Control.Monad.IO.Class as Exports+import Control.Monad.Fix as Exports hiding (fix)+import Control.Monad.ST as Exports+import Data.Bits as Exports import Data.Bool as Exports-import Data.Monoid as Exports hiding ((<>), First(..), Last(..))-import Data.Semigroup as Exports+import Data.Char as Exports+import Data.Coerce as Exports+import Data.Complex as Exports+import Data.Data as Exports+import Data.Dynamic as Exports+import Data.Either as Exports+import Data.Fixed as Exports import Data.Foldable as Exports+import Data.Function as Exports hiding (id, (.))+import Data.Functor as Exports import Data.Functor.Identity as Exports+import Data.Int as Exports+import Data.IORef as Exports+import Data.Ix as Exports+import Data.List as Exports hiding (sortOn, isSubsequenceOf, uncons, concat, foldr, foldl1, maximum, minimum, product, sum, all, and, any, concatMap, elem, foldl, foldr1, notElem, or, find, maximumBy, minimumBy, mapAccumL, mapAccumR, foldl')+import Data.Maybe as Exports+import Data.Monoid as Exports hiding (Last(..), First(..))+import Data.Ord as Exports+import Data.Proxy as Exports+import Data.Ratio as Exports+import Data.STRef as Exports+import Data.String as Exports import Data.Traversable as Exports-import Control.Applicative as Exports-import Control.Monad as Exports+import Data.Tuple as Exports+import Data.Unique as Exports+import Data.Version as Exports+import Data.Word as Exports+import Debug.Trace as Exports+import Foreign.ForeignPtr as Exports+import Foreign.Ptr as Exports+import Foreign.StablePtr as Exports+import Foreign.Storable as Exports hiding (sizeOf, alignment)+import GHC.Conc as Exports hiding (withMVar, threadWaitWriteSTM, threadWaitWrite, threadWaitReadSTM, threadWaitRead)+import GHC.Exts as Exports (lazy, inline, sortWith, groupWith)+import GHC.Generics as Exports (Generic)+import GHC.IO.Exception as Exports+import Numeric as Exports+import Prelude as Exports hiding (concat, foldr, mapM_, sequence_, foldl1, maximum, minimum, product, sum, all, and, any, concatMap, elem, foldl, foldr1, notElem, or, mapM, sequence, id, (.))+import System.Environment as Exports+import System.Exit as Exports+import System.IO as Exports+import System.IO.Error as Exports+import System.IO.Unsafe as Exports+import System.Mem as Exports+import System.Mem.StableName as Exports+import System.Timeout as Exports+import Text.ParserCombinators.ReadP as Exports (ReadP, ReadS, readP_to_S, readS_to_P)+import Text.ParserCombinators.ReadPrec as Exports (ReadPrec, readPrec_to_P, readP_to_Prec, readPrec_to_S, readS_to_Prec)+import Text.Printf as Exports (printf, hPrintf)+import Text.Read as Exports (Read(..), readMaybe, readEither)+import Unsafe.Coerce as Exports -- containers -------------------------
library/DeferredFolds/UnfoldM.hs view
@@ -27,6 +27,7 @@ instance Monad m => Monad (UnfoldM m) where return = pure+ {-# INLINE (>>=) #-} (>>=) (UnfoldM left) rightK = UnfoldM $ \ step init -> let@@ -91,11 +92,13 @@ foldable :: (Monad m, Foldable foldable) => foldable a -> UnfoldM m a foldable foldable = UnfoldM (\ step init -> A.foldlM step init foldable) +{-| Filter -} {-# INLINE filter #-} filter :: Monad m => (a -> m Bool) -> UnfoldM m a -> UnfoldM m a filter test (UnfoldM run) = UnfoldM (\ step -> run (\ state element -> test element >>= bool (return state) (step state element))) {-| Ints in the specified inclusive range -}+{-# INLINE intsInRange #-} intsInRange :: Monad m => Int -> Int -> UnfoldM m Int intsInRange from to = UnfoldM $ \ step init ->@@ -107,3 +110,10 @@ loop newState (succ int) else return state in loop init from++{-| TVar contents -}+{-# INLINE tVarValue #-}+tVarValue :: TVar a -> UnfoldM STM a+tVarValue var = UnfoldM $ \ step state -> do+ a <- readTVar var+ step state a