    -- | 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