packages feed

deferred-folds 0.9 → 0.9.1

raw patch · 2 files changed

+65/−14 lines, 2 filesPVP ok

version bump matches the API change (PVP)

API changes (from Hackage documentation)

+ DeferredFolds.Unfoldr: binaryDigits :: Integral a => a -> Unfoldr a
+ DeferredFolds.Unfoldr: enumsFrom :: (Enum a) => a -> Unfoldr a
+ DeferredFolds.Unfoldr: enumsInRange :: (Enum a, Ord a) => a -> a -> Unfoldr a
+ DeferredFolds.Unfoldr: octalDigits :: Integral a => a -> Unfoldr a
+ DeferredFolds.Unfoldr: reverseBinaryDigits :: Integral a => a -> Unfoldr a
+ DeferredFolds.Unfoldr: reverseOctalDigits :: Integral a => a -> Unfoldr a

Files

deferred-folds.cabal view
@@ -1,5 +1,5 @@ name: deferred-folds-version: 0.9+version: 0.9.1 category: Folding synopsis: Abstractions over deferred folds description:
library/DeferredFolds/Defs/Unfoldr.hs view
@@ -68,17 +68,17 @@ 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+{-| Ascending infinite stream of enums starting from the one specified -}+{-# INLINE enumsFrom #-}+enumsFrom :: (Enum a) => a -> Unfoldr a+enumsFrom from = Unfoldr $ \ step init -> let   loop int = step int (loop (succ int))   in loop from -{-| Ints in the specified inclusive range -}-{-# INLINE intsInRange #-}-intsInRange :: Int -> Int -> Unfoldr Int-intsInRange from to =+{-| Enums in the specified inclusive range -}+{-# INLINE enumsInRange #-}+enumsInRange :: (Enum a, Ord a) => a -> a -> Unfoldr a+enumsInRange from to =   Unfoldr $ \ step init ->   let     loop int =@@ -87,6 +87,16 @@         else init     in loop from +{-| Ascending infinite stream of ints starting from the one specified -}+{-# INLINE intsFrom #-}+intsFrom :: Int -> Unfoldr Int+intsFrom = enumsFrom++{-| Ints in the specified inclusive range -}+{-# INLINE intsInRange #-}+intsInRange :: Int -> Int -> Unfoldr Int+intsInRange = enumsInRange+ {-| Associations of a map -} {-# INLINE mapAssocs #-} mapAssocs :: Map key value -> Unfoldr (key, value)@@ -125,32 +135,73 @@   in loop 0  {-|-Extract individual digits of a non-negative integral number.+Binary digits of a non-negative integral number. -}+binaryDigits :: Integral a => a -> Unfoldr a+binaryDigits = reverse . reverseBinaryDigits++{-|+Binary digits of a non-negative integral number in reverse order.+-}+reverseBinaryDigits :: Integral a => a -> Unfoldr a+reverseBinaryDigits = reverseDigits 2++{-|+Octal digits of a non-negative integral number.+-}+octalDigits :: Integral a => a -> Unfoldr a+octalDigits = reverse . reverseOctalDigits++{-|+Octal digits of a non-negative integral number in reverse order.+-}+reverseOctalDigits :: Integral a => a -> Unfoldr a+reverseOctalDigits = reverseDigits 8++{-|+Decimal digits of a non-negative integral number.+-} decimalDigits :: Integral a => a -> Unfoldr a decimalDigits = reverse . reverseDecimalDigits  {-|-Extract individual digits of a non-negative integral number in reverse order.-More efficient than 'digits'.+Decimal digits of a non-negative integral number in reverse order.+More efficient than 'decimalDigits'. -} reverseDecimalDigits :: Integral a => a -> Unfoldr a reverseDecimalDigits = reverseDigits 10 +{-|+Hexadecimal digits of a non-negative number.+-} hexadecimalDigits :: Integral a => a -> Unfoldr a hexadecimalDigits = reverse . reverseHexadecimalDigits +{-|+Hexadecimal digits of a non-negative number in reverse order.+-} reverseHexadecimalDigits :: Integral a => a -> Unfoldr a reverseHexadecimalDigits = reverseDigits 16 -reverseDigits :: Integral a => a -> a -> Unfoldr a+{-|+Digits of a non-negative number in numeral system based on the specified radix.+The digits come in reverse order.++E.g., here's how an unfold of binary digits in proper order looks:++@+binaryDigits :: Integral a => a -> Unfoldr a+binaryDigits = 'reverse' . 'reverseDigits' 2+@+-}+reverseDigits :: Integral a => a {-^ Radix -} -> a {-^ Number -} -> Unfoldr a reverseDigits radix x = Unfoldr $ \ step init -> let   loop x = case divMod x radix of     (next, digit) -> step digit (if next <= 0 then init else loop next)   in loop x  {-|-Reverse the order+Reverse the order.  Use with care, because it requires to allocate all elements. -}