Data.Cache.LRU.IO
Description
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.
The interface this module provides is opaque. If further control is desired, the Data.Cache.LRU.IO.Internal module can be used in combination with Data.Cache.LRU.Internal.
(This implementation uses an MVar for coarse locking. It's unclear if anything else would give better performance, given that many calls alter the head of the access list.)
- data AtomicLRU key val
- newAtomicLRU :: Ord key => Int -> IO (AtomicLRU key val)
- fromList :: Ord key => Int -> [(key, val)] -> IO (AtomicLRU key val)
- toList :: Ord key => AtomicLRU key val -> IO [(key, val)]
- maxSize :: AtomicLRU key val -> IO Int
- 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 Bool
- size :: AtomicLRU key val -> IO Int
Documentation
Make a new AtomicLRU with the given maximum size.
Build a new LRU from the given maximum size and list of contents. See fromList for the semantics.
toList :: Ord key => AtomicLRU key val -> IO [(key, val)]Source
Retreive 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.