module Data.Cache.Eviction (
    EvictionStrategy(..)
) where

import Data.Hashable (Hashable)

class EvictionStrategy s where
    recordLookup :: (Eq k, Hashable k, Ord k) =>
        k -- ^ The key to lookup
        -> s k-- ^ The strategy (containing any state necessary)
        -> s k -- ^ The strategy + state folloiwng adding the key

    evict :: (Eq k, Hashable k, Ord k) =>
        s k
        -> (s k, Maybe k)