packages feed

combinators 0.1 → 0.1.1

raw patch · 2 files changed

+36/−3 lines, 2 filesPVP: major bump suggested

API removals or changes: PVP suggests a major version bump

API changes (from Hackage documentation)

+ Combinators: intercalate :: (Foldable f, Monoid a) => a -> f a -> a
+ Combinators: intercalateMap :: (Foldable f, Monoid m) => m -> (a -> m) -> f a -> m
+ Combinators: itraverse :: (Traversable f, Monad m) => (Int -> a -> m b) -> f a -> m (f b)
- Combinators: iforM :: (Monad m, Traversable f) => f a -> (Int -> a -> m b) -> m (f b)
+ Combinators: iforM :: (Traversable f, Monad m) => f a -> (Int -> a -> m b) -> m (f b)

Files

combinators.cabal view
@@ -1,6 +1,6 @@ cabal-version: 3.0 name: combinators-version: 0.1+version: 0.1.1 synopsis: Collection of combinators over standard typeclasses homepage: https://github.com/nikita-volkov/combinators bug-reports: https://github.com/nikita-volkov/combinators/issues@@ -12,7 +12,7 @@  source-repository head   type: git-  location: git://github.com/nikita-volkov/combinators.git+  location: https://github.com/nikita-volkov/combinators  common base   default-language: Haskell2010
src/library/Combinators.hs view
@@ -3,10 +3,13 @@ import Control.Applicative import Control.Monad import Control.Monad.State.Strict+import Data.Bool import Data.Foldable import Data.Function import Data.Int+import Data.Monoid import Data.Traversable+import Data.Tuple import GHC.Enum  -- * Alternation@@ -36,12 +39,36 @@   where     cons a b = mapper a <|> b +-- * Folding++-- |+-- A generic version of the original list-specialized version:+--+-- > intercalate :: [a] -> [[a]] -> [a]+{-# INLINE intercalate #-}+intercalate :: (Foldable f, Monoid a) => a -> f a -> a+intercalate = flip intercalateMap id++-- |+-- 'intercalate' extended with ability to map the wrapped value.+{-# INLINE intercalateMap #-}+intercalateMap :: (Foldable f, Monoid m) => m -> (a -> m) -> f a -> m+intercalateMap separator proj =+  fst+    . foldl'+      ( \(acc, isFirst) element ->+          if isFirst+            then (proj element, False)+            else (acc <> separator <> proj element, False)+      )+      (mempty, True)+ -- * Traversal  -- | -- Indexed version of 'forM'. {-# INLINE iforM #-}-iforM :: (Monad m, Traversable f) => f a -> (Int -> a -> m b) -> m (f b)+iforM :: (Traversable f, Monad m) => f a -> (Int -> a -> m b) -> m (f b) iforM collection f =   collection     & traverse@@ -50,3 +77,9 @@           lift (f i item)       )     & flip evalStateT 0++-- |+-- Indexed version of 'traverse'.+{-# INLINE itraverse #-}+itraverse :: (Traversable f, Monad m) => (Int -> a -> m b) -> f a -> m (f b)+itraverse = flip iforM