úÎSÊQ.      !"#$%&'()*+,-(c) 2014 Edward L. Blake  BSD-style )Edward L. Blake <edwardlblake@gmail.com>  experimental  portable  Safe-Inferred ./01     ./01(c) 2014 Edward L. Blake  BSD-style )Edward L. Blake <edwardlblake@gmail.com>  experimental  portable  Safe-InferredUnsigned integer (28) involved in the cache state incrementing accumulator. :Integer involved in the length of the usage history list. 1Integer involved in the size of a key-value map. ÿInteger involved in the time units used to determine when an item expires. The time units used can be any arbitrary integer time representation, such as seconds or milliseconds for examples. They can also be deterministic time steps in a sequencing monad. (c) 2014 Edward L. Blake  BSD-style )Edward L. Blake <edwardlblake@gmail.com>  experimental  portable  Safe-Inferred(The type that encapsulates a cache map. The cache state. (c) 2014 Edward L. Blake  BSD-style )Edward L. Blake <edwardlblake@gmail.com>  experimental  portable  Safe-Inferred !" !" !" !"(c) 2014 Edward L. Blake  BSD-style )Edward L. Blake <edwardlblake@gmail.com>  experimental  portable  Safe-Inferred%Debugging function #$%#$%#$%#$%(c) 2014 Edward L. Blake  BSD-style )Edward L. Blake <edwardlblake@gmail.com>  experimental  portable None&?Create a new expiring cache for retrieving uncached values via 3e interaction (such as in the case of reading a file from disk), with a shared state lock via an 4 to manage cache state. 'fCreate a new expiring cache along arbitrary monads with provided functions to create cache state in 5* m2, and modify and read cache state in 5 m1. (6Request a value associated with a key from the cache. jIf the value is not in the cache, the value will be requested through the function defined when the _ value was created, its computation returned and the value stored in the cache state map. GIf the value is in the cache and has not expired, it will be returned. ÝIf the value is in the cache and a new time is computed in the same lookup, and the value has been determined to have since expired, it will be discarded and a new value will be requested for this computation. Every (ÿd computation increments an accumulator in the cache state which is used to keep track of the succession of key accesses. This history of key accesses is then used to remove entries from the cache back down to a minimum size. Also, when the modulo of the accumulator and the modulo value computes to 0, the time request function defined when the Ø value was created is invoked for the current time to determine of which if any of the entries in the cache state map needs to be removed. In some cases the accumulator may get incremented more than once in a ( computation. „As the accumulator is a bound unsigned integer, when the accumulator increments back to 0, the cache state is completely cleared. ) Used with & or '8 to provide a consistent duration for requested values. &'()  !"&'() &')( !"&'()(c) 2014 Edward L. Blake  BSD-style )Edward L. Blake <edwardlblake@gmail.com>  experimental  portable  Safe-Inferred*?Create a new expiring cache for retrieving uncached values via 3d interaction (such as in the case of reading a file from disk), with a shared state lock via an 4 to manage cache state. +fCreate a new expiring cache along arbitrary monads with provided functions to create cache state in 5* m2, and modify and read cache state in 5 m1. ,6Request a value associated with a key from the cache. bIf the value is not in the cache, it will be requested through the function defined through newECMM, its computation returned and the value stored in the cache state map. GIf the value is in the cache and has not expired, it will be returned. ÝIf the value is in the cache and a new time is computed in the same lookup, and the value has been determined to have since expired, it will be discarded and a new value will be requested for this computation. Every ,ÿe computation increments an accumulator in the cache state which is used to keep track of the succession of key accesses. This history of key accesses is then used to remove entries from the cache back down to a minimum size. Also, when the modulo of the accumulator and the modulo value computes to 0, the time request function defined when the Ø value was created is invoked for the current time to determine of which if any of the entries in the cache state map needs to be removed. In some cases the accumulator may get incremented more than once in a , computation. „As the accumulator is a bound unsigned integer, when the accumulator increments back to 0, the cache state is completely cleared. - Used with * or +8 to provide a consistent duration for requested values. *+,-  !"*+,- *+-, !"*+,-6        !"#$%&'()*+,)*+,-./012345617819:;expiring-cache-map-0.0.5.0+Caching.ExpiringCacheMap.Utils.TestSequence$Caching.ExpiringCacheMap.Utils.Types'Caching.ExpiringCacheMap.Internal.TypesCaching.ExpiringCacheMap.Types*Caching.ExpiringCacheMap.Internal.Internal Caching.ExpiringCacheMap.HashECMCaching.ExpiringCacheMap.OrdECMTestSVar TestSequenceTestSequenceStateTestSequenceEvents HaveNumber ReadNumberGetTimePutVarGetVarrunTestSequence newTestSVar enterTestSVar readTestSVargetCurrentTime readNumber haveNumberECMIncr ECMULength ECMMapSize TimeUnitsECM CacheState ECMReadState ECMEnterState ECMNewState CacheSettingsCacheWithLRUListmapsize removalsizecompactlistsize updateUsesdetECMgetStatsStringnewECMIO newECMForM lookupECMconsistentDuration putTestSVar$fMonadTestSequence$fShowTestSequenceState$fShowTestSequenceEventsbaseGHC.WordWord32ghc-prim GHC.TypesIOGHC.MVarMVarGHC.BaseMonad