chorale 0.1.1 → 0.1.2
raw patch · 2 files changed
+77/−3 lines, 2 filesPVP: major bump suggested
API removals or changes: PVP suggests a major version bump
API changes (from Hackage documentation)
+ Chorale.Common: curryM2 :: (Functor m, Monad m) => (a -> b -> x) -> (m a, m b) -> m x
+ Chorale.Common: curryM3 :: (Functor m, Monad m) => (a -> b -> c -> x) -> (m a, m b, m c) -> m x
+ Chorale.Common: curryM4 :: (Functor m, Monad m) => (a -> b -> c -> d -> x) -> (m a, m b, m c, m d) -> m x
+ Chorale.Common: curryM5 :: (Functor m, Monad m) => (a -> b -> c -> d -> e -> x) -> (m a, m b, m c, m d, m e) -> m x
+ Chorale.Common: curryMM2 :: (Functor m, Monad m) => (a -> b -> m x) -> (m a, m b) -> m x
+ Chorale.Common: curryMM3 :: (Functor m, Monad m) => (a -> b -> c -> m x) -> (m a, m b, m c) -> m x
+ Chorale.Common: curryMM4 :: (Functor m, Monad m) => (a -> b -> c -> d -> m x) -> (m a, m b, m c, m d) -> m x
+ Chorale.Common: curryMM5 :: (Functor m, Monad m) => (a -> b -> c -> d -> e -> m x) -> (m a, m b, m c, m d, m e) -> m x
+ Chorale.Common: sequence3 :: (Functor m, Monad m) => (m a, m b, m c) -> m (a, b, c)
+ Chorale.Common: sequence4 :: (Functor m, Monad m) => (m a, m b, m c, m d) -> m (a, b, c, d)
+ Chorale.Common: sequence5 :: (Functor m, Monad m) => (m a, m b, m c, m d, m e) -> m (a, b, c, d, e)
- Chorale.Common: sequence2 :: (Functor m, Monad m) => (m a, m a) -> m (a, a)
+ Chorale.Common: sequence2 :: (Functor m, Monad m) => (m a, m b) -> m (a, b)
Files
- chorale.cabal +1/−1
- src/Chorale/Common.hs +76/−2
chorale.cabal view
@@ -1,5 +1,5 @@ name: chorale-version: 0.1.1+version: 0.1.2 homepage: https://github.com/mocnik-science/chorale bug-reports: https://github.com/mocnik-science/chorale/issues synopsis: A module containing basic functions that the prelude does not offer
src/Chorale/Common.hs view
@@ -17,12 +17,20 @@ (.*), (.**), (.***),+ curryM2,+ curryMM2, curry3, uncurry3,+ curryM3,+ curryMM3, curry4, uncurry4,+ curryM4,+ curryMM4, curry5, uncurry5,+ curryM5,+ curryMM5, -- * Tuples -- ** Generating Tuples appendFst,@@ -94,6 +102,9 @@ mapSnd, -- * Monads and Tuples sequence2,+ sequence3,+ sequence4,+ sequence5, (<<), -- * Ordering compareUsing,@@ -144,6 +155,7 @@ fromRight, Either3(..)) where +import Control.Monad import Data.List import qualified Data.Map as Map import Data.Maybe@@ -168,6 +180,14 @@ (.***) :: (e -> f) -> (a -> b -> c -> d -> e) -> a -> b -> c -> d -> f (.***) = (.) . (.**) +-- | 'curry' for two monadic arguments+curryM2 :: (Functor m, Monad m) => (a -> b -> x) -> (m a, m b) -> m x+curryM2 f t = uncurry f <$> sequence2 t++-- | 'curry' for two monadic arguments with monadic function+curryMM2 :: (Functor m, Monad m) => (a -> b -> m x) -> (m a, m b) -> m x+curryMM2 = join .* curryM2+ -- | 'curry' for three arguments {-# INLINE curry3 #-} curry3 :: ((a, b, c) -> d) -> a -> b -> c -> d@@ -178,6 +198,14 @@ uncurry3 :: (a -> b -> c -> d) -> (a, b, c) -> d uncurry3 f (a, b, c) = f a b c +-- | 'curry' for three monadic arguments+curryM3 :: (Functor m, Monad m) => (a -> b -> c -> x) -> (m a, m b, m c) -> m x+curryM3 f t = uncurry3 f <$> sequence3 t++-- | 'curry' for three monadic arguments with monadic function+curryMM3 :: (Functor m, Monad m) => (a -> b -> c -> m x) -> (m a, m b, m c) -> m x+curryMM3 = join .* curryM3+ -- | 'curry' for four arguments {-# INLINE curry4 #-} curry4 :: ((a, b, c, d) -> e) -> a -> b -> c -> d -> e@@ -188,6 +216,14 @@ uncurry4 :: (a -> b -> c -> d -> e) -> (a, b, c, d) -> e uncurry4 f (a, b, c, d) = f a b c d +-- | 'curry' for four monadic arguments+curryM4 :: (Functor m, Monad m) => (a -> b -> c -> d -> x) -> (m a, m b, m c, m d) -> m x+curryM4 f t = uncurry4 f <$> sequence4 t++-- | 'curry' for four monadic arguments with monadic function+curryMM4 :: (Functor m, Monad m) => (a -> b -> c -> d -> m x) -> (m a, m b, m c, m d) -> m x+curryMM4 = join .* curryM4+ -- | 'curry' for five arguments {-# INLINE curry5 #-} curry5 :: ((a, b, c, d, e) -> f) -> a -> b -> c -> d -> e -> f@@ -198,6 +234,14 @@ uncurry5 :: (a -> b -> c -> d -> e -> f) -> (a, b, c, d, e) -> f uncurry5 f (a, b, c, d, e) = f a b c d e +-- | 'curry' for five monadic arguments+curryM5 :: (Functor m, Monad m) => (a -> b -> c -> d -> e -> x) -> (m a, m b, m c, m d, m e) -> m x+curryM5 f t = uncurry5 f <$> sequence5 t++-- | 'curry' for five monadic arguments with monadic function+curryMM5 :: (Functor m, Monad m) => (a -> b -> c -> d -> e -> m x) -> (m a, m b, m c, m d, m e) -> m x+curryMM5 = join .* curryM5+ -- --== TUPLES -- --== GENERATING TUPLES @@ -470,8 +514,38 @@ -- --== MONADS AND TUPLES -- | like 'sequence' but for a 2-tuple-sequence2 :: (Functor m, Monad m) => (m a, m a) -> m (a, a)-sequence2 = fmap (fromJust . listToTuple2) . sequence . tupleToList2+sequence2 :: (Functor m, Monad m) => (m a, m b) -> m (a, b)+sequence2 (a, b) = do+ a' <- a+ b' <- b+ return (a', b')++-- | like 'sequence' but for a 3-tuple+sequence3 :: (Functor m, Monad m) => (m a, m b, m c) -> m (a, b, c)+sequence3 (a, b, c) = do+ a' <- a+ b' <- b+ c' <- c+ return (a', b', c')++-- | like 'sequence' but for a 4-tuple+sequence4 :: (Functor m, Monad m) => (m a, m b, m c, m d) -> m (a, b, c, d)+sequence4 (a, b, c, d) = do+ a' <- a+ b' <- b+ c' <- c+ d' <- d+ return (a', b', c', d')++-- | like 'sequence' but for a 5-tuple+sequence5 :: (Functor m, Monad m) => (m a, m b, m c, m d, m e) -> m (a, b, c, d, e)+sequence5 (a, b, c, d, e) = do+ a' <- a+ b' <- b+ c' <- c+ d' <- d+ e' <- e+ return (a', b', c', d', e') -- | like '>>' but with reversed argument (<<) :: (Monad m) => m b -> m a -> m b