schedule 0.2.0.0 → 0.3.0.0
raw patch · 6 files changed
+34/−32 lines, 6 filesPVP ok
version bump matches the API change (PVP)
API changes (from Hackage documentation)
- Control.Clock.IO: newClock1ms :: IO (Clock IO)
- Control.Clock.IO: newClock1s :: IO (Clock IO)
- Control.Clock.IO: newClockMilli :: Integer -> IO (Clock IO)
- Control.Clock.IO: newClockPico :: Integer -> IO (Clock IO)
+ Control.Clock.IO: Ms :: Intv
+ Control.Clock.IO: Ns :: Intv
+ Control.Clock.IO: Ps :: Intv
+ Control.Clock.IO: S :: Intv
+ Control.Clock.IO: Us :: Intv
+ Control.Clock.IO: data Intv
+ Control.Clock.IO: interval :: Integer -> Intv -> DiffTime
+ Control.Clock.IO: newClock' :: DiffTime -> IO (Clock IO)
- Control.Clock.IO: convClock :: DiffTime -> Clock -> Clock IO
+ Control.Clock.IO: convClock :: Tick -> DiffTime -> Clock -> Clock IO
- Control.Clock.IO: newClock :: DiffTime -> IO (Clock IO)
+ Control.Clock.IO: newClock :: Tick -> DiffTime -> IO (Clock IO)
- Control.Schedule.Future: _SFResult :: forall wo_avlh ro_avli ro_avEg. Prism (SFuture wo_avlh ro_avEg) (SFuture wo_avlh ro_avli) ro_avEg ro_avli
+ Control.Schedule.Future: _SFResult :: forall wo_avwx ro_avwy ro_avPw. Prism (SFuture wo_avwx ro_avPw) (SFuture wo_avwx ro_avwy) ro_avPw ro_avwy
- Control.Schedule.Future: _SFWaiting :: forall wo_avlh ro_avli wo_avEb. Prism (SFuture wo_avEb ro_avli) (SFuture wo_avlh ro_avli) (OSet wo_avEb) (OSet wo_avlh)
+ Control.Schedule.Future: _SFWaiting :: forall wo_avwx ro_avwy wo_avPr. Prism (SFuture wo_avPr ro_avwy) (SFuture wo_avwx ro_avwy) (OSet wo_avPr) (OSet wo_avwx)
- Control.Schedule.Future: _seExpects :: forall wi_avEr ri_avEs tk_avEt. Lens' (SExpect wi_avEr ri_avEs tk_avEt) (OMap wi_avEr (Task tk_avEt))
+ Control.Schedule.Future: _seExpects :: forall wi_avPH ri_avPI tk_avPJ. Lens' (SExpect wi_avPH ri_avPI tk_avPJ) (OMap wi_avPH (Task tk_avPJ))
- Control.Schedule.Future: _seResults :: forall wi_avEr ri_avEs tk_avEt ri_aw0V. Lens (SExpect wi_avEr ri_avEs tk_avEt) (SExpect wi_avEr ri_aw0V tk_avEt) (OMap wi_avEr (TimedResult tk_avEt ri_avEs)) (OMap wi_avEr (TimedResult tk_avEt ri_aw0V))
+ Control.Schedule.Future: _seResults :: forall wi_avPH ri_avPI tk_avPJ ri_awcb. Lens (SExpect wi_avPH ri_avPI tk_avPJ) (SExpect wi_avPH ri_awcb tk_avPJ) (OMap wi_avPH (TimedResult tk_avPJ ri_avPI)) (OMap wi_avPH (TimedResult tk_avPJ ri_awcb))
- Data.Rsv.RMMap: _content :: forall k_alMa a_alMb k_an9C a_an9D. Lens (RMMap k_alMa a_alMb) (RMMap k_an9C a_an9D) (Map k_alMa (Entries a_alMb)) (Map k_an9C (Entries a_an9D))
+ Data.Rsv.RMMap: _content :: forall k_alXa a_alXb k_ankC a_ankD. Lens (RMMap k_alXa a_alXb) (RMMap k_ankC a_ankD) (Map k_alXa (Entries a_alXb)) (Map k_ankC (Entries a_ankD))
- Data.Rsv.RMMap: _handles :: forall k_alMa a_alMb. Lens' (RMMap k_alMa a_alMb) RHandles
+ Data.Rsv.RMMap: _handles :: forall k_alXa a_alXb. Lens' (RMMap k_alXa a_alXb) RHandles
Files
- CHANGELOG.md +5/−0
- schedule.cabal +3/−3
- src/Control/Clock/IO.hs +24/−26
- src/Control/Monad/Schedule.hs +0/−1
- src/Data/Rsv/RMMap.hs +1/−1
- test/Control/Monad/ScheduleTest.hs +1/−1
CHANGELOG.md view
@@ -1,5 +1,10 @@ # Revision history for schedule +## 0.3.0.0 -- 2020-04-03++* Update to GHC 8.8.3, remove some redundant imports.+* Tweak Control.Clock.IO API to be more flexible+ ## 0.2.0.0 -- 2019-12-20 * Minor API and documentation tweaks.
schedule.cabal view
@@ -1,6 +1,6 @@ Cabal-Version: 2.4 Name: schedule-Version: 0.2.0.0+Version: 0.3.0.0 Synopsis: Pure deterministic scheduled computations Description: Schedule computations to run later, in a pure and deterministic way.@@ -61,9 +61,9 @@ License-File: LICENSE.GPL-3 Author: Ximin Luo Maintainer: infinity0@pwned.gg-Copyright: 2016-2019 Ximin Luo+Copyright: 2016-2020 Ximin Luo Category: Control, Schedule, Delay, Time, Timeout-Tested-With: GHC >= 8.6+Tested-With: GHC >= 8.8.3 Extra-Source-Files: CHANGELOG.md Source-Repository head
src/Control/Clock/IO.hs view
@@ -4,10 +4,9 @@ {-| Implementations of 'Clock' in the 'IO' monad. -} module Control.Clock.IO ( newClock- , newClockPico- , newClockMilli- , newClock1ms- , newClock1s+ , newClock'+ , Intv(..)+ , interval , convClock , clockWithIO , clockTimerIO@@ -38,25 +37,23 @@ import Control.Clock --- | Create a new clock ticking at a given interval.-newClock :: DiffTime -> IO (Clock IO)-newClock intv = convClock intv <$> T.newClock---- | Create a new clock ticking at a given interval in picoseconds.-newClockPico :: Integer -> IO (Clock IO)-newClockPico = newClock . picosecondsToDiffTime+-- | Create a new clock with the given start tick and interval.+newClock :: Tick -> DiffTime -> IO (Clock IO)+newClock start intv = convClock start intv <$> T.newClock --- | Create a new clock ticking at a given interval in milliseconds.-newClockMilli :: Integer -> IO (Clock IO)-newClockMilli ms = newClockPico (1000000000 * ms)+newClock' :: DiffTime -> IO (Clock IO)+newClock' = newClock 0 --- | Create a new clock ticking at 1 millisecond.-newClock1ms :: IO (Clock IO)-newClock1ms = newClockMilli 1+data Intv = Ps | Ns | Us | Ms | S --- | Create a new clock ticking at 1 second.-newClock1s :: IO (Clock IO)-newClock1s = newClockMilli 1000+-- | Convenience method for creating @DiffTime@ for use with @newClock@.+interval :: Integer -> Intv -> DiffTime+interval i u = picosecondsToDiffTime $ case u of+ Ps -> i+ Ns -> 1000 * i+ Us -> 1000000 * i+ Ms -> 1000000000 * i+ S -> 1000000000000 * i -- | Check for a non-negative number. checkNonNeg :: (HasCallStack, Num a, Ord a, Show a) => a -> a@@ -70,13 +67,14 @@ {-| Convert a "System.Time.Monotonic.Clock" into an abstract 'Clock' for scheduled computations, ticking at the given interval. -}-convClock :: DiffTime -> T.Clock -> Clock IO-convClock intv c =+convClock :: Tick -> DiffTime -> T.Clock -> Clock IO+convClock start intv c = let r = diffTimeToPicoseconds $ checkPos intv+ i = start * r c' = Clock- { clockNow = (`div` r) <$> clockNowPico c+ { clockNow = (`div` r) <$> clockNowPico i c , clockDelay = \d -> when (d > 0) $ do- remain <- (`rem` r) <$> clockNowPico c+ remain <- (`rem` r) <$> clockNowPico i c -- wait a bit past the tick, make sure we've gone over let t = r * fromIntegral d * 16 `div` 15 - remain clockDelayPico t@@ -85,8 +83,8 @@ } in c' -clockNowPico :: T.Clock -> IO Integer-clockNowPico c = diffTimeToPicoseconds <$> T.clockGetTime c+clockNowPico :: Tick -> T.Clock -> IO Integer+clockNowPico start c = (start +) . diffTimeToPicoseconds <$> T.clockGetTime c clockDelayPico :: Integer -> IO () clockDelayPico d = T.delay $ picosecondsToDiffTime $ checkNonNeg d
src/Control/Monad/Schedule.hs view
@@ -20,7 +20,6 @@ -- external import Control.Monad.Extra (whenMaybe)-import Data.Either (either) import Data.Functor.Identity (Identity (..)) import Data.Maybe (fromMaybe)
src/Data/Rsv/RMMap.hs view
@@ -85,7 +85,7 @@ checkValidity :: RMMap k a -> Maybe Text checkValidity (RMMap handles' content') = let res = flip mapMaybe (M.toList content') $ \(k, hh) -> do- if any (not . R.checkHandle handles' . fst) hh then Just k else Nothing+ if not (all (R.checkHandle handles' . fst) hh) then Just k else Nothing in case res of [] -> Nothing e -> Just $ pack "some handles were reused in the input"
test/Control/Monad/ScheduleTest.hs view
@@ -55,7 +55,7 @@ -> RunSched Tick (tm IO) -> IO () smoke mkRecv runWithNew runSched = do- clock <- newClock1ms+ clock <- newClock' (interval 1 Ms) recv <- mkRecv clock let top = 17 (r, s) <- runWithNew newSchedule $ do