arbor-lru-cache

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]

Warnings:

Please see the README on GitHub at https://github.com/arbor/arbor-lru-cache#readme


[Skip to ReadMe]

Properties

Versions0.1.1.0, 0.1.1.0
Change logChangeLog.md
Dependenciesbase (>=4.7 && <5), containers, generic-lens, lens, stm [details]
LicenseMIT
Copyright2018 Arbor Networks
AuthorArbor Networks
Maintainermayhem@arbor.net
Home pagehttps://github.com/arbor/arbor-lru-cache#readme
Bug trackerhttps://github.com/arbor/arbor-lru-cache/issues
Source repositoryhead: git clone https://github.com/arbor/arbor-lru-cache
UploadedWed Sep 26 05:06:40 UTC 2018 by arbornetworks

Modules

[Index]

Downloads

Maintainers' corner

For package maintainers and hackage trustees


Readme for arbor-lru-cache-0.1.1.0

[back to package description]

arbor-lru-cache

A thread-safe LRU cache library.

Example

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