module Data.Cache.Internal (
Cache(..)
, CacheItem(..)
, nowSTM
) where
import Control.Concurrent.STM
import GHC.Conc (unsafeIOToSTM)
import System.Clock
import qualified Data.HashMap.Strict as HM
data Cache k v = Cache {
Cache k v -> TVar (HashMap k (CacheItem v))
container :: TVar (HM.HashMap k (CacheItem v))
, Cache k v -> Maybe TimeSpec
defaultExpiration :: Maybe TimeSpec
}
data CacheItem v = CacheItem {
CacheItem v -> v
item :: v
, CacheItem v -> Maybe TimeSpec
itemExpiration :: Maybe TimeSpec
}
nowSTM :: STM TimeSpec
nowSTM :: STM TimeSpec
nowSTM = IO TimeSpec -> STM TimeSpec
forall a. IO a -> STM a
unsafeIOToSTM (IO TimeSpec -> STM TimeSpec) -> IO TimeSpec -> STM TimeSpec
forall a b. (a -> b) -> a -> b
$ Clock -> IO TimeSpec
getTime Clock
Monotonic