Safe Haskell | Safe |
---|---|
Language | Haskell98 |
This module contains a mutable wrapping of an LRU in the IO monad, providing atomic access in a concurrent environment. All calls preserve the same semantics as those in Data.Cache.LRU, but perform updates in place.
This module contains the internal implementation details. It's
possible to put an AtomicLRU
into a bad state with this module.
It is highly recommended that the external interface,
Data.Cache.LRU.IO, be used instead.
Synopsis
- newtype AtomicLRU key val = C (MVar (LRU key val))
- newAtomicLRU :: Ord key => Maybe Integer -> IO (AtomicLRU key val)
- fromList :: Ord key => Maybe Integer -> [(key, val)] -> IO (AtomicLRU key val)
- toList :: Ord key => AtomicLRU key val -> IO [(key, val)]
- maxSize :: AtomicLRU key val -> IO (Maybe Integer)
- insert :: Ord key => key -> val -> AtomicLRU key val -> IO ()
- lookup :: Ord key => key -> AtomicLRU key val -> IO (Maybe val)
- delete :: Ord key => key -> AtomicLRU key val -> IO (Maybe val)
- pop :: Ord key => AtomicLRU key val -> IO (Maybe (key, val))
- size :: AtomicLRU key val -> IO Int
- modifyAtomicLRU :: (LRU key val -> LRU key val) -> AtomicLRU key val -> IO ()
- modifyAtomicLRU' :: (LRU key val -> IO (LRU key val)) -> AtomicLRU key val -> IO ()
- modifyMVar_' :: MVar a -> (a -> IO a) -> IO ()
- modifyMVar' :: MVar a -> (a -> IO (a, b)) -> IO b
Documentation
Make a new AtomicLRU that will not grow beyond the optional maximum size, if specified.
Build a new LRU from the optional maximum size and list of
contents. See fromList
for the semantics.
toList :: Ord key => AtomicLRU key val -> IO [(key, val)] Source #
Retrieve a list view of an AtomicLRU. See toList
for the
semantics.
insert :: Ord key => key -> val -> AtomicLRU key val -> IO () Source #
Insert a key/value pair into an AtomicLRU. See insert
for
the semantics.
lookup :: Ord key => key -> AtomicLRU key val -> IO (Maybe val) Source #
Look up a key in an AtomicLRU. See lookup
for the
semantics.
delete :: Ord key => key -> AtomicLRU key val -> IO (Maybe val) Source #
Remove an item from an AtomicLRU. Returns the value for the removed key, if it was present
pop :: Ord key => AtomicLRU key val -> IO (Maybe (key, val)) Source #
Remove the least-recently accessed item from an AtomicLRU. Returns the (key, val) pair removed, if one was present.
size :: AtomicLRU key val -> IO Int Source #
Returns the number of elements the AtomicLRU currently contains.
modifyAtomicLRU :: (LRU key val -> LRU key val) -> AtomicLRU key val -> IO () Source #
Given a function that takes an LRU
and returns one of the
same type, use it to modify the contents of this AtomicLRU.
modifyAtomicLRU' :: (LRU key val -> IO (LRU key val)) -> AtomicLRU key val -> IO () Source #
Given a function that takes an LRU
and returns an IO action
producting one of the same type, use it to modify the contents of
this AtomicLRU.
modifyMVar_' :: MVar a -> (a -> IO a) -> IO () Source #
A version of modifyMVar_
that forces the result of the
function application to WHNF.
modifyMVar' :: MVar a -> (a -> IO (a, b)) -> IO b Source #
A version of modifyMVar
that forces the result of the
function application to WHNF.