event-list 0.0.9.1 → 0.0.10
raw patch · 14 files changed
+277/−84 lines, 14 filesdep +special-functorsPVP ok
version bump matches the API change (PVP)
Dependencies added: special-functors
API changes (from Hackage documentation)
+ Data.EventList.Absolute.TimeBody: traverse :: (Applicative m) => (time0 -> m time1) -> (body0 -> m body1) -> T time0 body0 -> m (T time1 body1)
+ Data.EventList.Absolute.TimeBody: traverseBody :: (Applicative m) => (body0 -> m body1) -> T time body0 -> m (T time body1)
+ Data.EventList.Absolute.TimeBody: traverseTime :: (Applicative m) => (time0 -> m time1) -> T time0 body -> m (T time1 body)
+ Data.EventList.Absolute.TimeBody: traverse_ :: (Applicative m) => (time -> m ()) -> (body -> m ()) -> T time body -> m ()
+ Data.EventList.Absolute.TimeTime: traverse :: (Applicative m) => (time0 -> m time1) -> (body0 -> m body1) -> T time0 body0 -> m (T time1 body1)
+ Data.EventList.Absolute.TimeTime: traverseBody :: (Applicative m) => (body0 -> m body1) -> T time body0 -> m (T time body1)
+ Data.EventList.Absolute.TimeTime: traverseTime :: (Applicative m) => (time0 -> m time1) -> T time0 body -> m (T time1 body)
+ Data.EventList.Absolute.TimeTime: traverse_ :: (Applicative m) => (time -> m ()) -> (body -> m ()) -> T time body -> m ()
+ Data.EventList.Relative.BodyTime: traverse :: (Applicative m) => (time0 -> m time1) -> (body0 -> m body1) -> T time0 body0 -> m (T time1 body1)
+ Data.EventList.Relative.TimeBody: traverse :: (Applicative m) => (time0 -> m time1) -> (body0 -> m body1) -> T time0 body0 -> m (T time1 body1)
+ Data.EventList.Relative.TimeBody: traverseBody :: (Applicative m) => (body0 -> m body1) -> T time body0 -> m (T time body1)
+ Data.EventList.Relative.TimeBody: traverseTime :: (Applicative m) => (time0 -> m time1) -> T time0 body -> m (T time1 body)
+ Data.EventList.Relative.TimeBody: traverse_ :: (Applicative m) => (time -> m ()) -> (body -> m ()) -> T time body -> m ()
+ Data.EventList.Relative.TimeBody: zipWithBody :: (body0 -> body1 -> body2) -> [body0] -> T time body1 -> T time body2
+ Data.EventList.Relative.TimeBody: zipWithTime :: (time0 -> time1 -> time2) -> [time0] -> T time1 body -> T time2 body
+ Data.EventList.Relative.TimeTime: traverse :: (Applicative m) => (time0 -> m time1) -> (body0 -> m body1) -> T time0 body0 -> m (T time1 body1)
+ Data.EventList.Relative.TimeTime: traverseBody :: (Applicative m) => (body0 -> m body1) -> T time body0 -> m (T time body1)
+ Data.EventList.Relative.TimeTime: traverseTime :: (Applicative m) => (time0 -> m time1) -> T time0 body -> m (T time1 body)
+ Data.EventList.Relative.TimeTime: traverse_ :: (Applicative m) => (time -> m ()) -> (body -> m ()) -> T time body -> m ()
+ Data.EventList.Relative.TimeTime: zipWithBody :: (body0 -> body1 -> body2) -> [body0] -> T time body1 -> T time body2
+ Data.EventList.Relative.TimeTime: zipWithTime :: (time0 -> time1 -> time2) -> (time0, [time0]) -> T time1 body -> T time2 body
Files
- event-list.cabal +5/−3
- src/Data/AlternatingList/List/Disparate.hs +33/−28
- src/Data/AlternatingList/List/Mixed.hs +2/−2
- src/Data/AlternatingList/List/Uniform.hs +29/−18
- src/Data/EventList/Absolute/TimeBody.hs +33/−6
- src/Data/EventList/Absolute/TimeBodyPrivate.hs +8/−1
- src/Data/EventList/Absolute/TimeTime.hs +34/−7
- src/Data/EventList/Absolute/TimeTimePrivate.hs +9/−1
- src/Data/EventList/Relative/BodyBody.hs +10/−2
- src/Data/EventList/Relative/BodyTime.hs +10/−3
- src/Data/EventList/Relative/TimeBody.hs +44/−6
- src/Data/EventList/Relative/TimeBodyPrivate.hs +9/−1
- src/Data/EventList/Relative/TimeTime.hs +42/−5
- src/Data/EventList/Relative/TimeTimePrivate.hs +9/−1
event-list.cabal view
@@ -1,5 +1,5 @@ Name: event-list-Version: 0.0.9.1+Version: 0.0.10 License: GPL License-File: LICENSE Author: Henning Thielemann <haskell@henning-thielemann.de>@@ -26,7 +26,7 @@ Source-Repository this type: darcs location: http://darcs.haskell.org/event-list/- tag: 0.0.9.1+ tag: 0.0.10 Flag splitBase description: Choose the new smaller, split-up base package.@@ -42,7 +42,9 @@ If flag(splitBase) Build-Depends: base >= 2 && <5 Else- Build-Depends: base >= 1.0 && < 2+ Build-Depends:+ special-functors >= 1.0 && <1.1,+ base >= 1.0 && < 2 GHC-Options: -Wall Hs-Source-Dirs: src
src/Data/AlternatingList/List/Disparate.hs view
@@ -1,5 +1,5 @@ {- |-Copyright : (c) Henning Thielemann 2007+Copyright : (c) Henning Thielemann 2007-2009 Maintainer : haskell@henning-thielemann.de Stability : stable@@ -13,9 +13,10 @@ (T, fromPairList, toPairList, map, mapFirst, mapSecond,+ zipWithFirst, zipWithSecond, concatMonoid, concatMapMonoid, sequence, sequence_,- mapM, mapM_, mapFirstM, mapSecondM,+ traverse, traverse_, traverseFirst, traverseSecond, getFirsts, getSeconds, length, genericLength, empty, singleton, null, cons, snoc, viewL, viewR, switchL, switchR, mapHead, mapLast,@@ -25,7 +26,6 @@ splitAt, take, drop, genericSplitAt, genericTake, genericDrop, spanFirst, spanSecond,- zipWithFirst, zipWithSecond, ) where import Data.Tuple.HT (mapSnd, mapPair, )@@ -33,13 +33,17 @@ import qualified Data.List as List import qualified Data.List.HT as ListHT import qualified Control.Monad as Monad+import qualified Control.Applicative as Applicative+import qualified Data.Traversable as Trav++import Control.Applicative (Applicative, pure, ) import Data.Monoid (Monoid, mempty, mappend, ) import Test.QuickCheck (Arbitrary, arbitrary, coarbitrary) import Prelude hiding (null, foldr, map, concat, cycle, length, take, drop, splitAt,- sequence, sequence_, mapM, mapM_)+ sequence, sequence_, ) data Pair a b =@@ -107,6 +111,15 @@ mapSecond g = lift (List.map (mapPairSecond g)) +zipWithFirst :: (a0 -> a1 -> a2) -> [a0] -> T a1 b -> T a2 b+zipWithFirst f xs =+ lift $ zipWith (\x (Pair a b) -> Pair (f x a) b) xs++zipWithSecond :: (b0 -> b1 -> b2) -> [b0] -> T a b1 -> T a b2+zipWithSecond f xs =+ lift $ zipWith (\x (Pair a b) -> Pair a (f x b)) xs++ concatMonoid :: Monoid m => T m m -> m concatMonoid =@@ -120,41 +133,41 @@ concatMonoid . map f g -sequence :: Monad m =>+sequence :: Applicative m => T (m a) (m b) -> m (T a b) sequence =- Monad.liftM Cons .- Monad.mapM (\(Pair a b) -> Monad.liftM2 Pair a b) .+ Applicative.liftA Cons .+ Trav.traverse (\(Pair a b) -> Applicative.liftA2 Pair a b) . decons -sequence_ :: (Monad m, Monoid d) =>+sequence_ :: (Applicative m, Monoid d) => T (m d) (m d) -> m d sequence_ =- foldr (Monad.liftM2 mappend) (Monad.liftM2 mappend) $ return mempty--- Monad.mapM_ (\(Pair a b) -> Monad.liftM2 mappend a b) . decons+ foldr (Applicative.liftA2 mappend) (Applicative.liftA2 mappend) $ pure mempty+-- Trav.traverse_ (\(Pair a b) -> Applicative.liftA2 mappend a b) . decons -mapM :: Monad m =>+traverse :: Applicative m => (a0 -> m a1) -> (b0 -> m b1) -> T a0 b0 -> m (T a1 b1)-mapM aAction bAction =+traverse aAction bAction = sequence . map aAction bAction -mapM_ :: (Monad m, Monoid d) =>+traverse_ :: (Applicative m, Monoid d) => (a -> m d) -> (b -> m d) -> T a b -> m d-mapM_ aAction bAction =+traverse_ aAction bAction = sequence_ . map aAction bAction -mapFirstM :: Monad m =>+traverseFirst :: Applicative m => (a0 -> m a1) -> T a0 b -> m (T a1 b)-mapFirstM aAction =- mapM aAction return+traverseFirst aAction =+ traverse aAction pure -mapSecondM :: Monad m =>+traverseSecond :: Applicative m => (b0 -> m b1) -> T a b0 -> m (T a b1)-mapSecondM bAction =- mapM return bAction+traverseSecond bAction =+ traverse pure bAction getFirsts :: T a b -> [a]@@ -290,11 +303,3 @@ viewBodyL) empty -}--zipWithFirst :: (a0 -> a1 -> a2) -> [a0] -> T a1 b -> T a2 b-zipWithFirst f xs =- Cons . zipWith (\x (Pair a b) -> Pair (f x a) b) xs . decons--zipWithSecond :: (b0 -> b1 -> b2) -> [b0] -> T a b1 -> T a b2-zipWithSecond f xs =- Cons . zipWith (\x (Pair a b) -> Pair a (f x b)) xs . decons
src/Data/AlternatingList/List/Mixed.hs view
@@ -1,5 +1,5 @@ {- |-Copyright : (c) Henning Thielemann 2007+Copyright : (c) Henning Thielemann 2007-2009 Maintainer : haskell@henning-thielemann.de Stability : stable@@ -39,7 +39,7 @@ import Data.Tuple.HT (mapFst, mapSnd, mapPair, ) import Prelude hiding- (null, foldr, map, concat, sequence, sequence_, mapM, mapM_)+ (null, foldr, map, concat, sequence, sequence_, ) infixr 5 ./, /.
src/Data/AlternatingList/List/Uniform.hs view
@@ -1,5 +1,5 @@ {- |-Copyright : (c) Henning Thielemann 2007+Copyright : (c) Henning Thielemann 2007-2009 Maintainer : haskell@henning-thielemann.de Stability : stable@@ -12,9 +12,10 @@ module Data.AlternatingList.List.Uniform (T(Cons), map, mapFirst, mapSecond,+ zipWithFirst, zipWithSecond, concatMonoid, concatMapMonoid, sequence, sequence_,- mapM, mapM_, mapFirstM, mapSecondM,+ traverse, traverse_, traverseFirst, traverseSecond, getFirsts, getSeconds, length, genericLength, fromFirstList, fromSecondList, fromEitherList, singleton, isSingleton,@@ -32,9 +33,10 @@ import qualified Data.AlternatingList.List.Disparate as Disp import qualified Control.Monad as Monad+import qualified Control.Applicative as Applicative import qualified Data.List as List -import Control.Monad (Monad, return, )+import Control.Applicative (Applicative, pure, ) import Data.Monoid (Monoid, mempty, mappend, ) import Test.QuickCheck (Arbitrary, arbitrary, coarbitrary)@@ -50,7 +52,7 @@ Eq, Ord, Show, (>)) -} import Prelude hiding- (null, foldr, map, concat, length, sequence, sequence_, mapM, mapM_)+ (null, foldr, map, concat, length, sequence, sequence_, ) {- |@@ -94,7 +96,16 @@ mapSecond g (Cons b xs) = Cons (g b) (Disp.mapSecond g xs) +zipWithFirst :: (a0 -> a1 -> a2) -> [a0] -> T a1 b -> T a2 b+zipWithFirst f xs (Cons a bs) =+ Cons a $ Disp.zipWithFirst f xs bs +zipWithSecond :: (b0 -> b1 -> b2) -> (b0,[b0]) -> T a b1 -> T a b2+zipWithSecond f (x,xs) (Cons a bs) =+ Cons (f x a) $ Disp.zipWithSecond f xs bs+++ concatMonoid :: Monoid m => T m m -> m concatMonoid =@@ -108,38 +119,38 @@ concatMonoid . map f g -sequence :: Monad m =>+sequence :: Applicative m => T (m a) (m b) -> m (T a b) sequence (Cons b xs) =- Monad.liftM2 Cons b (Disp.sequence xs)+ Applicative.liftA2 Cons b (Disp.sequence xs) -sequence_ :: (Monad m, Monoid d) =>+sequence_ :: (Applicative m, Monoid d) => T (m d) (m d) -> m d sequence_ (Cons b xs) =- Monad.liftM2 mappend b $ Disp.sequence_ xs+ Applicative.liftA2 mappend b $ Disp.sequence_ xs -mapM :: Monad m =>+traverse :: Applicative m => (a0 -> m a1) -> (b0 -> m b1) -> T a0 b0 -> m (T a1 b1)-mapM aAction bAction =+traverse aAction bAction = sequence . map aAction bAction -mapM_ :: (Monad m, Monoid d) =>+traverse_ :: (Applicative m, Monoid d) => (a -> m d) -> (b -> m d) -> T a b -> m d-mapM_ aAction bAction =+traverse_ aAction bAction = sequence_ . map aAction bAction -mapFirstM :: Monad m =>+traverseFirst :: Applicative m => (a0 -> m a1) -> T a0 b -> m (T a1 b)-mapFirstM aAction =- mapM aAction return+traverseFirst aAction =+ traverse aAction pure -mapSecondM :: Monad m =>+traverseSecond :: Applicative m => (b0 -> m b1) -> T a b0 -> m (T a b1)-mapSecondM bAction =- mapM return bAction+traverseSecond bAction =+ traverse pure bAction getFirsts :: T a b -> [a]
src/Data/EventList/Absolute/TimeBody.hs view
@@ -1,5 +1,5 @@ {- |-Copyright : (c) Henning Thielemann 2007+Copyright : (c) Henning Thielemann 2007-2009 Maintainer : haskell@henning-thielemann.de Stability : stable@@ -13,6 +13,7 @@ getTimes, getBodies, duration, mapBody, mapTime, concatMapMonoid,+ traverse, traverse_, traverseBody, traverseTime, mapM, mapM_, mapBodyM, mapTimeM, merge, mergeBy, insert, insertBy, moveForward,@@ -44,7 +45,10 @@ import Data.List.HT (isAscending, isAscendingLazy, ) import Data.Function.HT (compose2, ) import Data.EventList.Utility (beforeBy, )+ import qualified Control.Monad as Monad+import Control.Applicative (Applicative, WrappedMonad(WrapMonad, unwrapMonad), )+ import Control.Monad.Trans.State (state, evalState) import Prelude hiding (mapM, mapM_, null, foldr, filter, concat, cycle)@@ -120,24 +124,47 @@ concatMapMonoid f g = Disp.concatMapMonoid f g . decons ++traverse :: Applicative m =>+ (time0 -> m time1) -> (body0 -> m body1) ->+ T time0 body0 -> m (T time1 body1)+traverse f g = liftA (Disp.traverse f g)++traverse_ :: Applicative m =>+ (time -> m ()) -> (body -> m ()) ->+ T time body -> m ()+traverse_ f g = Disp.traverse_ f g . decons+++traverseBody :: Applicative m =>+ (body0 -> m body1) -> T time body0 -> m (T time body1)+traverseBody f = liftA (Disp.traverseSecond f)++traverseTime :: Applicative m =>+ (time0 -> m time1) -> T time0 body -> m (T time1 body)+traverseTime f = liftA (Disp.traverseFirst f)++ mapM :: Monad m => (time0 -> m time1) -> (body0 -> m body1) -> T time0 body0 -> m (T time1 body1)-mapM f g = liftM (Disp.mapM f g)+mapM f g =+ unwrapMonad . traverse (WrapMonad . f) (WrapMonad . g) mapM_ :: Monad m => (time -> m ()) -> (body -> m ()) -> T time body -> m ()-mapM_ f g = Disp.mapM_ f g . decons+mapM_ f g =+ unwrapMonad . traverse_ (WrapMonad . f) (WrapMonad . g) mapBodyM :: Monad m => (body0 -> m body1) -> T time body0 -> m (T time body1)-mapBodyM f = liftM (Disp.mapSecondM f)+mapBodyM f = unwrapMonad . traverseBody (WrapMonad . f) mapTimeM :: Monad m => (time0 -> m time1) -> T time0 body -> m (T time1 body)-mapTimeM f = liftM (Disp.mapFirstM f)+mapTimeM f = unwrapMonad . traverseTime (WrapMonad . f) {- |@@ -213,7 +240,7 @@ Mixed.consFirst t0 . Uniform.catMaybesFirst . flip evalState (Just t0) .- Uniform.mapFirstM (\time -> state $ \ oldTime ->+ Uniform.traverseFirst (\time -> state $ \ oldTime -> (Monad.guard (time /= oldTime) >> time, time)) . Uniform.mapFirst Just) . decons
src/Data/EventList/Absolute/TimeBodyPrivate.hs view
@@ -1,5 +1,5 @@ {- |-Copyright : (c) Henning Thielemann 2007+Copyright : (c) Henning Thielemann 2007-2009 Maintainer : haskell@henning-thielemann.de Stability : stable@@ -12,7 +12,9 @@ -- import qualified Data.AlternatingList.List.Mixed as Mixed import qualified Control.Monad as Monad+import qualified Control.Applicative as Applicative +import Control.Applicative (Applicative, ) newtype T time body = Cons {decons :: Disp.T time body}@@ -29,6 +31,11 @@ (Disp.T time0 body0 -> Disp.T time1 body1) -> (T time0 body0 -> T time1 body1) lift f = Cons . f . decons++liftA :: Applicative m =>+ (Disp.T time0 body0 -> m (Disp.T time1 body1)) ->+ (T time0 body0 -> m (T time1 body1))+liftA f = Applicative.liftA Cons . f . decons liftM :: Monad m => (Disp.T time0 body0 -> m (Disp.T time1 body1)) ->
src/Data/EventList/Absolute/TimeTime.hs view
@@ -1,5 +1,5 @@ {- |-Copyright : (c) Henning Thielemann 2007+Copyright : (c) Henning Thielemann 2007-2009 Maintainer : haskell@henning-thielemann.de Stability : stable@@ -12,7 +12,9 @@ pause, isPause, viewL, switchL, cons, snoc, mapBody, mapTime,- concatMapMonoid, mapM, mapM_, mapBodyM, mapTimeM,+ concatMapMonoid,+ traverse, traverse_, traverseBody, traverseTime,+ mapM, mapM_, mapBodyM, mapTimeM, getTimes, getBodies, duration, merge, mergeBy, insert, insertBy, moveForward,@@ -40,7 +42,10 @@ import Data.Tuple.HT (mapSnd, mapPair, ) import Data.Maybe.HT (toMaybe, ) import Data.List.HT (isAscending, )+ import qualified Control.Monad as Monad+import Control.Applicative (Applicative, WrappedMonad(WrapMonad, unwrapMonad), )+ import Control.Monad.Trans.State (state, evalState) import Data.Monoid (Monoid, )@@ -107,24 +112,46 @@ Uniform.concatMapMonoid g f . decons +traverse :: Applicative m =>+ (time0 -> m time1) -> (body0 -> m body1) ->+ T time0 body0 -> m (T time1 body1)+traverse f g = liftA (Uniform.traverse g f)++traverse_ :: Applicative m =>+ (time -> m ()) -> (body -> m ()) ->+ T time body -> m ()+traverse_ f g = Uniform.traverse_ g f . decons+++traverseBody :: Applicative m =>+ (body0 -> m body1) -> T time body0 -> m (T time body1)+traverseBody f = liftA (Uniform.traverseFirst f)++traverseTime :: Applicative m =>+ (time0 -> m time1) -> T time0 body -> m (T time1 body)+traverseTime f = liftA (Uniform.traverseSecond f)++ mapM :: Monad m => (time0 -> m time1) -> (body0 -> m body1) -> T time0 body0 -> m (T time1 body1)-mapM f g = liftM (Uniform.mapM g f)+mapM f g =+ unwrapMonad . traverse (WrapMonad . f) (WrapMonad . g) mapM_ :: Monad m => (time -> m ()) -> (body -> m ()) -> T time body -> m ()-mapM_ f g = Uniform.mapM_ g f . decons+mapM_ f g =+ unwrapMonad . traverse_ (WrapMonad . f) (WrapMonad . g) mapBodyM :: Monad m => (body0 -> m body1) -> T time body0 -> m (T time body1)-mapBodyM = liftM . Uniform.mapFirstM+mapBodyM f = unwrapMonad . traverseBody (WrapMonad . f) mapTimeM :: Monad m => (time0 -> m time1) -> T time0 body -> m (T time1 body)-mapTimeM = liftM . Uniform.mapSecondM+mapTimeM f = unwrapMonad . traverseTime (WrapMonad . f) @@ -175,7 +202,7 @@ Mixed.mapFirstInit (Uniform.catMaybesFirst . flip evalState (Just t0) .- Uniform.mapFirstM (\time -> state $ \ oldTime ->+ Uniform.traverseFirst (\time -> state $ \ oldTime -> (Monad.guard (time /= oldTime) >> time, time)) . Uniform.mapFirst Just)) . decons
src/Data/EventList/Absolute/TimeTimePrivate.hs view
@@ -1,5 +1,5 @@ {- |-Copyright : (c) Henning Thielemann 2007+Copyright : (c) Henning Thielemann 2007-2009 Maintainer : haskell@henning-thielemann.de Stability : stable@@ -18,8 +18,11 @@ import Data.Tuple.HT (mapFst, ) import qualified Control.Monad as Monad+import qualified Control.Applicative as Applicative +import Control.Applicative (Applicative, ) + newtype T time body = Cons {decons :: Uniform.T body time} deriving (Eq, Ord, Show) @@ -33,6 +36,11 @@ (Uniform.T body0 time0 -> Uniform.T body1 time1) -> (T time0 body0 -> T time1 body1) lift f = Cons . f . decons++liftA :: Applicative m =>+ (Uniform.T body0 time0 -> m (Uniform.T body1 time1)) ->+ (T time0 body0 -> m (T time1 body1))+liftA f = Applicative.liftA Cons . f . decons liftM :: Monad m => (Uniform.T body0 time0 -> m (Uniform.T body1 time1)) ->
src/Data/EventList/Relative/BodyBody.hs view
@@ -1,5 +1,5 @@ {- |-Copyright : (c) Henning Thielemann 2007+Copyright : (c) Henning Thielemann 2007-2009 Maintainer : haskell@henning-thielemann.de Stability : stable@@ -19,6 +19,7 @@ -- import qualified Data.AlternatingList.List.Disparate as Disp import qualified Data.AlternatingList.List.Uniform as Uniform +import Control.Applicative (Applicative, WrappedMonad(WrapMonad, unwrapMonad), liftA, ) import Data.Monoid (Monoid, ) import Prelude hiding (mapM)@@ -29,7 +30,14 @@ T time body -> m concatMapMonoid f g = Uniform.concatMapMonoid f g . decons +traverse :: Applicative m =>+ (time0 -> m time1) -> (body0 -> m body1) ->+ T time0 body0 -> m (T time1 body1)+traverse f g =+ liftA Cons . Uniform.traverse f g . decons+ mapM :: Monad m => (time0 -> m time1) -> (body0 -> m body1) -> T time0 body0 -> m (T time1 body1)-mapM f g = liftM (Uniform.mapM f g)+mapM f g =+ unwrapMonad . traverse (WrapMonad . f) (WrapMonad . g)
src/Data/EventList/Relative/BodyTime.hs view
@@ -1,5 +1,5 @@ {- |-Copyright : (c) Henning Thielemann 2007+Copyright : (c) Henning Thielemann 2007-2009 Maintainer : haskell@henning-thielemann.de Stability : stable@@ -12,7 +12,7 @@ module Data.EventList.Relative.BodyTime (T, empty, fromPairList, toPairList,- concatMapMonoid, mapM,+ concatMapMonoid, traverse, mapM, foldr, foldrPair, cons, snoc, viewL, viewR, switchL, switchR, span,@@ -23,6 +23,7 @@ import qualified Data.AlternatingList.List.Disparate as Disp -- import qualified Data.AlternatingList.List.Uniform as Uniform +import Control.Applicative (Applicative, WrappedMonad(WrapMonad, unwrapMonad), liftA, ) import Data.Monoid (Monoid, ) import Data.Tuple.HT (mapFst, mapSnd, mapPair, )@@ -44,11 +45,17 @@ concatMapMonoid f g = Disp.concatMapMonoid g f . decons +traverse :: Applicative m =>+ (time0 -> m time1) -> (body0 -> m body1) ->+ T time0 body0 -> m (T time1 body1)+traverse timeAction bodyAction =+ liftA Cons . Disp.traverse bodyAction timeAction . decons+ mapM :: Monad m => (time0 -> m time1) -> (body0 -> m body1) -> T time0 body0 -> m (T time1 body1) mapM timeAction bodyAction =- liftM (Disp.mapM bodyAction timeAction)+ unwrapMonad . traverse (WrapMonad . timeAction) (WrapMonad . bodyAction) foldr :: (body -> a -> b) -> (time -> b -> a) -> b -> T time body -> b
src/Data/EventList/Relative/TimeBody.hs view
@@ -1,5 +1,5 @@ {- |-Copyright : (c) Henning Thielemann 2007+Copyright : (c) Henning Thielemann 2007-2009 Maintainer : haskell@henning-thielemann.de Stability : stable@@ -25,7 +25,10 @@ fromPairList, toPairList, getTimes, getBodies, duration, mapBody, mapTime,- concatMapMonoid, mapM, mapM_, mapBodyM, mapTimeM,+ zipWithBody, zipWithTime,+ concatMapMonoid,+ traverse, traverse_, traverseBody, traverseTime,+ mapM, mapM_, mapBodyM, mapTimeM, foldr, foldrPair, merge, mergeBy, insert, insertBy, moveForward,@@ -51,6 +54,7 @@ import qualified Data.List as List import qualified Data.EventList.Utility as Utility +import Control.Applicative (Applicative, WrappedMonad(WrapMonad, unwrapMonad), ) import Data.Monoid (Monoid, ) import qualified Numeric.NonNegative.Class as NonNeg@@ -123,31 +127,65 @@ mapTime f = lift (Disp.mapFirst f) +zipWithBody ::+ (body0 -> body1 -> body2) ->+ [body0] -> T time body1 -> T time body2+zipWithBody f = lift . Disp.zipWithSecond f +zipWithTime ::+ (time0 -> time1 -> time2) ->+ [time0] -> T time1 body -> T time2 body+zipWithTime f = lift . Disp.zipWithFirst f+++ concatMapMonoid :: Monoid m => (time -> m) -> (body -> m) -> T time body -> m concatMapMonoid f g = Disp.concatMapMonoid f g . decons ++traverse :: Applicative m =>+ (time0 -> m time1) -> (body0 -> m body1) ->+ T time0 body0 -> m (T time1 body1)+traverse f g = liftA (Disp.traverse f g)++traverse_ :: Applicative m =>+ (time -> m ()) -> (body -> m ()) ->+ T time body -> m ()+traverse_ f g = Disp.traverse_ f g . decons+++traverseBody :: Applicative m =>+ (body0 -> m body1) -> T time body0 -> m (T time body1)+traverseBody f = liftA (Disp.traverseSecond f)++traverseTime :: Applicative m =>+ (time0 -> m time1) -> T time0 body -> m (T time1 body)+traverseTime f = liftA (Disp.traverseFirst f)++ mapM :: Monad m => (time0 -> m time1) -> (body0 -> m body1) -> T time0 body0 -> m (T time1 body1)-mapM f g = liftM (Disp.mapM f g)+mapM f g =+ unwrapMonad . traverse (WrapMonad . f) (WrapMonad . g) mapM_ :: Monad m => (time -> m ()) -> (body -> m ()) -> T time body -> m ()-mapM_ f g = Disp.mapM_ f g . decons+mapM_ f g =+ unwrapMonad . traverse_ (WrapMonad . f) (WrapMonad . g) mapBodyM :: Monad m => (body0 -> m body1) -> T time body0 -> m (T time body1)-mapBodyM f = liftM (Disp.mapSecondM f)+mapBodyM f = unwrapMonad . traverseBody (WrapMonad . f) mapTimeM :: Monad m => (time0 -> m time1) -> T time0 body -> m (T time1 body)-mapTimeM f = liftM (Disp.mapFirstM f)+mapTimeM f = unwrapMonad . traverseTime (WrapMonad . f)
src/Data/EventList/Relative/TimeBodyPrivate.hs view
@@ -1,5 +1,5 @@ {- |-Copyright : (c) Henning Thielemann 2007+Copyright : (c) Henning Thielemann 2007-2009 Maintainer : haskell@henning-thielemann.de Stability : stable@@ -15,7 +15,10 @@ import qualified Data.AlternatingList.List.Mixed as Mixed import qualified Control.Monad as Monad+import qualified Control.Applicative as Applicative +import Control.Applicative (Applicative, )+ import Data.Tuple.HT (mapSnd, ) import Test.QuickCheck (Arbitrary(..))@@ -46,6 +49,11 @@ (Disp.T time0 body0 -> Disp.T time1 body1) -> (T time0 body0 -> T time1 body1) lift f = Cons . f . decons++liftA :: Applicative m =>+ (Disp.T time0 body0 -> m (Disp.T time1 body1)) ->+ (T time0 body0 -> m (T time1 body1))+liftA f = Applicative.liftA Cons . f . decons liftM :: Monad m => (Disp.T time0 body0 -> m (Disp.T time1 body1)) ->
src/Data/EventList/Relative/TimeTime.hs view
@@ -1,5 +1,5 @@ {- |-Copyright : (c) Henning Thielemann 2007+Copyright : (c) Henning Thielemann 2007-2009 Maintainer : haskell@henning-thielemann.de Stability : stable@@ -10,7 +10,9 @@ module Data.EventList.Relative.TimeTime (T, mapBody, mapTime,+ zipWithBody, zipWithTime, concatMapMonoid,+ traverse, traverse_, traverseBody, traverseTime, mapM, mapM_, mapBodyM, mapTimeM, getTimes, getBodies, duration, merge, mergeBy, insert, {- insertBy, -} pad,@@ -52,7 +54,9 @@ import Data.List.HT (isAscending, ) import Data.EventList.Utility (floorDiff, ) import Control.Monad.Trans.State (evalState, modify, get, gets, put, )+ import Control.Monad (liftM2, )+import Control.Applicative (Applicative, WrappedMonad(WrapMonad, unwrapMonad), ) import Prelude hiding (null, foldr, map, filter, concat, cycle, sequence, sequence_, mapM, mapM_)@@ -116,30 +120,63 @@ mapTime = lift . Uniform.mapSecond +zipWithBody ::+ (body0 -> body1 -> body2) ->+ [body0] -> T time body1 -> T time body2+zipWithBody f = lift . Uniform.zipWithFirst f +zipWithTime ::+ (time0 -> time1 -> time2) ->+ (time0, [time0]) -> T time1 body -> T time2 body+zipWithTime f = lift . Uniform.zipWithSecond f+++ concatMapMonoid :: Monoid m => (time -> m) -> (body -> m) -> T time body -> m concatMapMonoid f g = Uniform.concatMapMonoid g f . decons +traverse :: Applicative m =>+ (time0 -> m time1) -> (body0 -> m body1) ->+ T time0 body0 -> m (T time1 body1)+traverse f g = liftA (Uniform.traverse g f)++traverse_ :: Applicative m =>+ (time -> m ()) -> (body -> m ()) ->+ T time body -> m ()+traverse_ f g = Uniform.traverse_ g f . decons+++traverseBody :: Applicative m =>+ (body0 -> m body1) -> T time body0 -> m (T time body1)+traverseBody f = liftA (Uniform.traverseFirst f)++traverseTime :: Applicative m =>+ (time0 -> m time1) -> T time0 body -> m (T time1 body)+traverseTime f = liftA (Uniform.traverseSecond f)++ mapM :: Monad m => (time0 -> m time1) -> (body0 -> m body1) -> T time0 body0 -> m (T time1 body1)-mapM f g = liftM (Uniform.mapM g f)+mapM f g =+ unwrapMonad . traverse (WrapMonad . f) (WrapMonad . g) mapM_ :: Monad m => (time -> m ()) -> (body -> m ()) -> T time body -> m ()-mapM_ f g = Uniform.mapM_ g f . decons+mapM_ f g =+ unwrapMonad . traverse_ (WrapMonad . f) (WrapMonad . g) mapBodyM :: Monad m => (body0 -> m body1) -> T time body0 -> m (T time body1)-mapBodyM = liftM . Uniform.mapFirstM+mapBodyM f = unwrapMonad . traverseBody (WrapMonad . f) mapTimeM :: Monad m => (time0 -> m time1) -> T time0 body -> m (T time1 body)-mapTimeM = liftM . Uniform.mapSecondM+mapTimeM f = unwrapMonad . traverseTime (WrapMonad . f)
src/Data/EventList/Relative/TimeTimePrivate.hs view
@@ -1,5 +1,5 @@ {- |-Copyright : (c) Henning Thielemann 2007+Copyright : (c) Henning Thielemann 2007-2009 Maintainer : haskell@henning-thielemann.de Stability : stable@@ -20,7 +20,10 @@ import Data.Tuple.HT (mapFst, mapSnd, ) import qualified Control.Monad as Monad+import qualified Control.Applicative as Applicative +import Control.Applicative (Applicative, )+ import Test.QuickCheck (Arbitrary(..)) @@ -48,6 +51,11 @@ (Uniform.T body0 time0 -> Uniform.T body1 time1) -> (T time0 body0 -> T time1 body1) lift f = Cons . f . decons++liftA :: Applicative m =>+ (Uniform.T body0 time0 -> m (Uniform.T body1 time1)) ->+ (T time0 body0 -> m (T time1 body1))+liftA f = Applicative.liftA Cons . f . decons liftM :: Monad m => (Uniform.T body0 time0 -> m (Uniform.T body1 time1)) ->