This is a package candidate release! Here you can preview how this package release will appear once published to the main package index (which can be accomplished via the 'maintain' link below). Please note that once a package has been published to the main package index it cannot be undone! Please consult the package uploading documentation for more information.

[maintain] [Publish]


Please see the README on GitHub at

[Skip to Readme]


Change log
Dependencies base (>=4.7 && <5), containers, generic-lens, lens, stm [details]
License MIT
Copyright 2018 Arbor Networks
Author Arbor Networks
Home page
Bug tracker
Source repo head: git clone
Uploaded by arbornetworks at 2018-09-26T05:06:40Z




Maintainer's Corner

For package maintainers and hackage trustees

Readme for arbor-lru-cache-

[back to package description]


A thread-safe LRU cache library.


To use the cache:

main :: IO
main = do
  -- Provide a configuration that includes how many simultaneous in
  -- flight requests are allowed and now many entries the cache can store
  let config = A.CacheConfig
        { A.maxRequestsInFlight = 1
        , A.maxOccupancy        = 1

  -- Create a cache providing the config and functions that handle retrieval
  -- and eviction.
  cache <- A.makeCache config retrieve evict

  -- Perform your lookups
  _ <- A.lookup 1 cache
  _ <- A.lookup 2 cache
  _ <- A.lookup 3 cache

  return ()

-- Implement value retrieval function.  If the same key is looked up multiple
-- times, the cache guarantees that the retrieve function is called only once
-- for that key up until it is evicted.
retrieve :: Int -> IO String
retrieve mk = ...

-- Perform any cleanup that should occur when an entry is evicted
-- Please be aware that if your code is concurrent, the eviction function may
-- be called whilst the you code is concurrently using a value it has looked up.
-- Your code is wholly responsible for ensuring this case still works.
evict :: Int -> String -> IO ()
evict mk mv = ...