-- | 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.  All functions use a single atomic update
-- of the backing structure.
--
-- 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.)
module Data.Cache.LRU.IO
    ( AtomicLRU
    , newAtomicLRU
    , fromList
    , toList
    , maxSize
    , insert
    , lookup
    , delete
    , pop
    , size
    , modifyAtomicLRU
    , modifyAtomicLRU'
    )
where

import Prelude hiding ( lookup )

import Data.Cache.LRU.IO.Internal