timemap 0.0.4 → 0.0.5
raw patch · 3 files changed
+74/−2 lines, 3 filesPVP ok
version bump matches the API change (PVP)
API changes (from Hackage documentation)
+ Data.TimeSet: TimeSet :: TimeMap a () -> TimeSet a
+ Data.TimeSet: [getTimeSet] :: TimeSet a -> TimeMap a ()
+ Data.TimeSet: ageOf :: (Hashable a, Eq a) => a -> TimeSet a -> IO (Maybe NominalDiffTime)
+ Data.TimeSet: delete :: (Hashable a, Eq a) => a -> TimeSet a -> STM ()
+ Data.TimeSet: elem :: (Hashable a, Eq a) => a -> TimeSet a -> STM Bool
+ Data.TimeSet: elems :: (Hashable a, Eq a) => TimeSet a -> STM (HashSet a)
+ Data.TimeSet: filter :: (Hashable a, Eq a) => (a -> Bool) -> TimeSet a -> STM ()
+ Data.TimeSet: filterFromNow :: (Hashable a, Eq a) => NominalDiffTime -> TimeSet a -> IO ()
+ Data.TimeSet: filterSince :: (Hashable a, Eq a) => UTCTime -> TimeSet a -> STM ()
+ Data.TimeSet: insert :: (Hashable a, Eq a) => a -> TimeSet a -> IO ()
+ Data.TimeSet: insertWithTime :: (Hashable a, Eq a) => UTCTime -> a -> TimeSet a -> STM ()
+ Data.TimeSet: newTimeSet :: STM (TimeSet a)
+ Data.TimeSet: newtype TimeSet a
+ Data.TimeSet: null :: TimeSet a -> STM Bool
+ Data.TimeSet: size :: TimeSet a -> STM Int
+ Data.TimeSet: timeOf :: (Hashable a, Eq a) => a -> TimeSet a -> STM (Maybe UTCTime)
+ Data.TimeSet: touch :: (Hashable a, Eq a) => a -> TimeSet a -> IO ()
Files
- src/Data/TimeMap.hs +1/−1
- src/Data/TimeSet.hs +71/−0
- timemap.cabal +2/−1
src/Data/TimeMap.hs view
@@ -59,7 +59,7 @@ import qualified Focus as F import qualified ListT as L import Control.Monad (forM)-import Control.Concurrent.STM+import Control.Concurrent.STM (STM, atomically, TVar, writeTVar, readTVar, modifyTVar', modifyTVar, newTVar) data TimeIndexed a = TimeIndexed
+ src/Data/TimeSet.hs view
@@ -0,0 +1,71 @@+module Data.TimeSet where++import Data.TimeMap (TimeMap, newTimeMap)+import qualified Data.TimeMap as TimeMap+import Data.Hashable (Hashable (..))+import Data.Time (UTCTime, NominalDiffTime, addUTCTime, diffUTCTime, getCurrentTime)+import qualified Data.HashSet as HS+import Control.Concurrent.STM (STM)+++newtype TimeSet a = TimeSet {getTimeSet :: TimeMap a ()}+++newTimeSet :: STM (TimeSet a)+newTimeSet = TimeSet <$> newTimeMap+++insert :: (Hashable a, Eq a) => a -> TimeSet a -> IO ()+insert a (TimeSet xs) = TimeMap.insert a () xs+++insertWithTime :: (Hashable a, Eq a) => UTCTime -> a -> TimeSet a -> STM ()+insertWithTime t a (TimeSet xs) = TimeMap.insertWithTime t a () xs+++elem :: (Hashable a, Eq a) => a -> TimeSet a -> STM Bool+elem a (TimeSet xs) = do+ r <- TimeMap.lookup a xs+ case r of+ Nothing -> pure False+ Just () -> pure True+++elems :: (Hashable a, Eq a) => TimeSet a -> STM (HS.HashSet a)+elems (TimeSet xs) = TimeMap.keys xs+++size :: TimeSet a -> STM Int+size (TimeSet xs) = TimeMap.size xs+++null :: TimeSet a -> STM Bool+null (TimeSet xs) = TimeMap.null xs+++timeOf :: (Hashable a, Eq a) => a -> TimeSet a -> STM (Maybe UTCTime)+timeOf a (TimeSet xs) = TimeMap.timeOf a xs+++ageOf :: (Hashable a, Eq a) => a -> TimeSet a -> IO (Maybe NominalDiffTime)+ageOf a (TimeSet xs) = TimeMap.ageOf a xs+++delete :: (Hashable a, Eq a) => a -> TimeSet a -> STM ()+delete a (TimeSet xs) = TimeMap.delete a xs+++touch :: (Hashable a, Eq a) => a -> TimeSet a -> IO ()+touch a (TimeSet xs) = TimeMap.touch a xs+++filter :: (Hashable a, Eq a) => (a -> Bool) -> TimeSet a -> STM ()+filter f (TimeSet xs) = TimeMap.filterWithKey (\k _ -> f k) xs+++filterSince :: (Hashable a, Eq a) => UTCTime -> TimeSet a -> STM ()+filterSince t (TimeSet xs) = TimeMap.filterSince t xs+++filterFromNow :: (Hashable a, Eq a) => NominalDiffTime -> TimeSet a -> IO ()+filterFromNow t (TimeSet xs) = TimeMap.filterFromNow t xs
timemap.cabal view
@@ -1,5 +1,5 @@ Name: timemap-Version: 0.0.4+Version: 0.0.5 Author: Athan Clark <athan.clark@gmail.com> Maintainer: Athan Clark <athan.clark@gmail.com> License: BSD3@@ -19,6 +19,7 @@ HS-Source-Dirs: src GHC-Options: -Wall Exposed-Modules: Data.TimeMap+ Data.TimeSet Other-Modules: Data.TimeMap.Internal Build-Depends: base >= 4.8 && < 5 , containers