deferred-folds 0.7 → 0.7.1
raw patch · 2 files changed
+27/−2 lines, 2 filesPVP ok
version bump matches the API change (PVP)
API changes (from Hackage documentation)
+ DeferredFolds.Unfoldr: digits :: Integral a => a -> Unfoldr a
+ DeferredFolds.Unfoldr: reverse :: Unfoldr a -> Unfoldr a
+ DeferredFolds.Unfoldr: reverseDigits :: Integral a => a -> Unfoldr a
Files
deferred-folds.cabal view
@@ -1,5 +1,5 @@ name: deferred-folds-version: 0.7+version: 0.7.1 category: Folding synopsis: Abstractions over deferred folds description:
library/DeferredFolds/Defs/Unfoldr.hs view
@@ -1,7 +1,7 @@ module DeferredFolds.Defs.Unfoldr where -import DeferredFolds.Prelude hiding (fold)+import DeferredFolds.Prelude hiding (fold, reverse) import DeferredFolds.Types import qualified Data.Map.Strict as Map import qualified Data.IntMap.Strict as IntMap@@ -73,6 +73,7 @@ filter :: (a -> Bool) -> Unfoldr a -> Unfoldr a filter test (Unfoldr run) = Unfoldr (\ step -> run (\ element state -> if test element then step element state else state)) +{-| Ascending infinite stream of ints starting from the one specified -} {-# INLINE intsFrom #-} intsFrom :: Int -> Unfoldr Int intsFrom from = Unfoldr $ \ step init -> let@@ -127,3 +128,27 @@ then step (index, indexPrimArray pa index) (loop (succ index)) else state in loop 0++{-|+Extract individual digits of a non-negative integral number.+-}+digits :: Integral a => a -> Unfoldr a+digits = reverse . reverseDigits++{-|+Extract individual digits of a non-negative integral number in reverse order.+More efficient than 'digits'.+-}+reverseDigits :: Integral a => a -> Unfoldr a+reverseDigits x = Unfoldr $ \ step init -> let+ loop x = case divMod x 10 of+ (next, digit) -> step digit (if next <= 0 then init else loop next)+ in loop x++{-|+Reverse the order++Use with care, because it requires to allocate all elements.+-}+reverse :: Unfoldr a -> Unfoldr a+reverse (Unfoldr unfoldr) = Unfoldr $ \ step -> unfoldr (\ a f -> f . step a) id