-- Hoogle documentation, generated by Haddock -- See Hoogle, http://www.haskell.org/hoogle/ -- | Please see the README on Github at -- https://github.com/githubuser/timemap#readme @package timemap @version 0.0.7 module Data.TimeMap.Internal type MultiMap k a = Map k (HashSet a) empty :: MultiMap k a insert :: (Ord k, Hashable a, Eq a) => k -> a -> MultiMap k a -> MultiMap k a lookup :: (Ord k) => k -> MultiMap k a -> HashSet a -- | Deletes all elements at k delete :: (Ord k) => k -> MultiMap k a -> MultiMap k a -- | Deletes only the element a from the referenced key k remove :: (Ord k, Hashable a, Eq a) => k -> a -> MultiMap k a -> MultiMap k a elems :: (Hashable a, Eq a) => MultiMap k a -> HashSet a toList :: (Hashable a, Eq a) => MultiMap k a -> [(k, a)] -- | A time-indexed mutable map for hashable keys. -- -- The goal of this map is to provide moderately fast lookups and -- insertions for key/value pairs, while implicitly keeping track of the -- last modification time of each entity. The auxilliary time data is -- used for filterSince and filterFromNow, which quickly -- prune the data set to get rid of old entities. module Data.TimeMap -- | A mutable reference for a time-indexed map, similar to a STRef. data TimeMap k a -- | Create a fresh, empty map. newTimeMap :: STM (TimeMap k a) -- | Inserts a key and value into a TimeMap - it adds the value or -- overwites an existing entity. insert :: Hashable k => Eq k => k -> a -> TimeMap k a -> IO () insertWithTime :: forall k a. Hashable k => Eq k => UTCTime -> k -> a -> TimeMap k a -> STM () -- | Updates or deletes the value at k, while updating its time. update :: Hashable k => Eq k => (a -> Maybe a) -> k -> TimeMap k a -> IO () updateWithTime :: forall k a. Hashable k => Eq k => UTCTime -> (a -> Maybe a) -> k -> TimeMap k a -> STM () -- | Adjusts the value at k, while updating its time. adjust :: Hashable k => Eq k => (a -> a) -> k -> TimeMap k a -> IO () adjustWithTime :: forall k a. Hashable k => Eq k => UTCTime -> (a -> a) -> k -> TimeMap k a -> STM () -- | Deletes the value at k. delete :: Hashable k => Eq k => k -> TimeMap k a -> STM () -- | Resets the key to the current time, and fails silently when the key -- isn't present. touch :: Hashable k => Eq k => k -> TimeMap k a -> IO () -- | Performs a non-mutating lookup for some key. lookup :: Hashable k => Eq k => k -> TimeMap k a -> STM (Maybe a) timeOf :: Hashable k => Eq k => k -> TimeMap k a -> STM (Maybe UTCTime) ageOf :: Hashable k => Eq k => k -> TimeMap k a -> IO (Maybe NominalDiffTime) keys :: Hashable k => Eq k => TimeMap k a -> STM (HashSet k) elems :: TimeMap k a -> STM [a] toList :: Hashable k => Eq k => TimeMap k a -> STM [(k, a)] size :: TimeMap k a -> STM Int null :: TimeMap k a -> STM Bool filter :: Hashable k => Eq k => (a -> Bool) -> TimeMap k a -> STM () filterWithKey :: forall k a. Hashable k => Eq k => (k -> a -> Bool) -> TimeMap k a -> STM () -- | Filters out all entries older than or equal to a designated time filterSince :: Hashable k => Eq k => UTCTime -> TimeMap k a -> STM () -- | Filters out all entries within some time frame -- --
--   filterFromNow 1 -- removes entities older than or equal to one second from now
--   
filterFromNow :: Hashable k => Eq k => NominalDiffTime -> TimeMap k a -> IO () takeSince :: Hashable k => Eq k => UTCTime -> TimeMap k a -> STM [(k, a)] takeFromNow :: Hashable k => Eq k => NominalDiffTime -> TimeMap k a -> IO [(k, a)] module Data.TimeSet newtype TimeSet a TimeSet :: TimeMap a () -> TimeSet a [getTimeSet] :: TimeSet a -> TimeMap a () newTimeSet :: STM (TimeSet a) insert :: (Hashable a, Eq a) => a -> TimeSet a -> IO () insertWithTime :: (Hashable a, Eq a) => UTCTime -> a -> TimeSet a -> STM () elem :: (Hashable a, Eq a) => a -> TimeSet a -> STM Bool elems :: (Hashable a, Eq a) => TimeSet a -> STM (HashSet a) size :: TimeSet a -> STM Int null :: TimeSet a -> STM Bool timeOf :: (Hashable a, Eq a) => a -> TimeSet a -> STM (Maybe UTCTime) ageOf :: (Hashable a, Eq a) => a -> TimeSet a -> IO (Maybe NominalDiffTime) delete :: (Hashable a, Eq a) => a -> TimeSet a -> STM () touch :: (Hashable a, Eq a) => a -> TimeSet a -> IO () filter :: (Hashable a, Eq a) => (a -> Bool) -> TimeSet a -> STM () takeSince :: (Hashable a, Eq a) => UTCTime -> TimeSet a -> STM [a] filterSince :: (Hashable a, Eq a) => UTCTime -> TimeSet a -> STM () takeFromNow :: (Hashable a, Eq a) => NominalDiffTime -> TimeSet a -> IO [a] filterFromNow :: (Hashable a, Eq a) => NominalDiffTime -> TimeSet a -> IO () module Data.TimeMap.Multi newtype TimeMultiMap k a TimeMultiMap :: TimeSet (k, a) -> TimeMultiMap k a [getTimeMultiMap] :: TimeMultiMap k a -> TimeSet (k, a) newTimeMultiMap :: STM (TimeMultiMap k a) insert :: (Hashable k, Hashable a, Eq k, Eq a) => k -> a -> TimeMultiMap k a -> IO () insertWithTime :: (Hashable k, Hashable a, Eq k, Eq a) => UTCTime -> k -> a -> TimeMultiMap k a -> STM () elem :: (Hashable k, Hashable a, Eq k, Eq a) => k -> a -> TimeMultiMap k a -> STM Bool keys :: (Hashable k, Hashable a, Eq k, Eq a) => TimeMultiMap k a -> STM [k] elems :: (Hashable k, Hashable a, Eq k, Eq a) => TimeMultiMap k a -> STM [a] size :: TimeMultiMap k a -> STM Int null :: TimeMultiMap k a -> STM Bool timeOf :: (Hashable k, Hashable a, Eq k, Eq a) => k -> a -> TimeMultiMap k a -> STM (Maybe UTCTime) ageOf :: (Hashable k, Hashable a, Eq k, Eq a) => k -> a -> TimeMultiMap k a -> IO (Maybe NominalDiffTime) delete :: (Hashable k, Hashable a, Eq k, Eq a) => k -> a -> TimeMultiMap k a -> STM () deleteAll :: (Hashable k, Hashable a, Eq k, Eq a) => k -> TimeMultiMap k a -> STM () touch :: (Hashable k, Hashable a, Eq k, Eq a) => k -> a -> TimeMultiMap k a -> IO () filter :: (Hashable k, Hashable a, Eq k, Eq a) => (k -> a -> Bool) -> TimeMultiMap k a -> STM () takeSince :: (Hashable k, Hashable a, Eq k, Eq a) => UTCTime -> TimeMultiMap k a -> STM [(k, a)] filterSince :: (Hashable k, Hashable a, Eq k, Eq a) => UTCTime -> TimeMultiMap k a -> STM () takeFromNow :: (Hashable k, Hashable a, Eq k, Eq a) => NominalDiffTime -> TimeMultiMap k a -> IO [(k, a)] filterFromNow :: (Hashable k, Hashable a, Eq k, Eq a) => NominalDiffTime -> TimeMultiMap k a -> IO ()