---------------------------------------------------------------------- -- | -- Module : Data.HashTable -- Copyright : (c) Peter Robinson -- License : BSD3 (see the file LICENSE) -- -- Maintainer : Peter Robinson <pwr@lowerbound.io> -- Stability : provisional -- Portability : non-portable (requires concurrency, stm) -- -- You can find benchmarks and more information about the internals of this package here: <https://lowerbound.io/blog/2019-10-24_concurrent_hash_table_performance.html> -- -- -- Usage Example: -- -- >> ht <- newWithDefaults 4 -- creates hash table of initial size 4 -- >> insert ht 1 "hello" -- adds key-value pair (1,"hello") -- >> insert ht 2 "world" -- adds key-value pair (2,"world") -- >> atomically $ readAssocs ht -- convert to a key-value list -- > [(1,"hello"),(2,"world")] -- >> readSizeIO ht -- returns 4 -- >> insert ht 3 "!" -- adds key-value pair (3,"!") and triggers a resize as the load fraction is ≥ 0.75 -- >> readSizeIO ht -- returns 8 -- >> atomically $ readAssocs ht -- convert to a key-value list -- > [(1,"hello"),(3,"!"),(2,"world")] -- -- List of atomic operations: -- 'insert', 'insertIfNotExists', 'update', 'lookup', 'delete', 'readAssocs', 'resize' -- ---------------------------------------------------------------------- module Data.HashTable( HashTable, Chain, new, newWithDefaults, mkDefaultConfig, Config(..), lookup, insert, insertIfNotExists, update, delete, readAssocs, readSizeIO, readSize ) where import Data.HashTable.Internal import Prelude hiding (lookup)