úÎp†iä3      !"#$%&'()*+,-./012  Safe-Infered 3456789:; 3456789:; 3456789:; Safe-Infered<7What you have to mask an integer index by to tell if it's  cacheline-aligned =>?<@ABCDEFGHIJ=>?<@ABCDEFGHIJ=>?<@ABCDEFGHIJ Safe-InferedKLMNKLMNKLMN  Safe-InferedOPQRSTOPQRSTOPQRST  Safe-InferedU)Returns 0 if x is positive, -1 otherwise VAbs of an integer, branchless W Returns 0xfff..fff (aka -1) if a == b, 0 otherwise. XKSearch through a mutable vector for a given int value, cache-line aligned. D If the start index is cache-line aligned, and there is more than a  cache-line'Bs room between the start index and the end of the vector, we will A search the cache-line all at once using an efficient branchless A bit-twiddling technique. Otherwise, we will use a typical loop. YASearch through a mutable vector for one of two given int values, M cache-line aligned. If the start index is cache-line aligned, and there is  more than a cache-line'2s room between the start index and the end of the F vector, we will search the cache-line all at once using an efficient L branchless bit-twiddling technique. Otherwise, we will use a typical loop. ZCSearch through a mutable vector for one of three given int values, M cache-line aligned. If the start index is cache-line aligned, and there is  more than a cache-line'2s room between the start index and the end of the F vector, we will search the cache-line all at once using an efficient L branchless bit-twiddling technique. Otherwise, we will use a typical loop. [\]^_`UVWaXvector to search  start index value to search for %dest index where it can be found, or  "-1" if not found Yvector to search  start index value to search for value 2 to search for %dest index where it can be found, or  "-1" if not found Zvector to search  start index value to search for value 2 to search for value 3 to search for %dest index where it can be found, or  "-1" if not found [\]^_`UVWaXYZ [\]^_`UVWaXYZ  Safe-Inferedbcdebcdbcd  Safe-Inferedfghijkldefault value  new size number of elements to copy  old array mnopqrstuvfghijklmnopqrstuvfghijklmnopqrstuv Safe-Infered #A typeclass for hash tables in the w monad. The operations on these 7 hash tables are typically both key- and value-strict. )Creates a new, default-sized hash table. O(1). 'Creates a new hash table sized to hold n elements. O(n).  Inserts a key/8value mapping into a hash table, replacing any existing  mapping for that key. O(n) worst case, O(1) amortized. /Deletes a key-value mapping from a hash table. O(n) worst case,  O(1) amortized. .Looks up a key-value mapping in a hash table. O(n) worst case,  (O(1) for cuckoo hash), O(1) amortized. @A strict fold over the key-value records of a hash table in the w  monad. O(n). :A side-effecting map over the key-value records of a hash  table. O(n). AComputes the overhead (in words) per key-value mapping. Used for F debugging, etc; time complexity depends on the underlying hash table  implementation. O(n). 4Create a hash table from a list of key-value pairs. O(n). 7Given a hash table, produce a list of key-value pairs. O(n).      Safe-Infered 4An open addressing hash table using linear probing. +See the documentation for this function in  Data.HashTable.Class#v:new. +See the documentation for this function in  Data.HashTable.Class#v:newSized. +See the documentation for this function in  Data.HashTable.Class#v:delete. +See the documentation for this function in  Data.HashTable.Class#v:lookup. +See the documentation for this function in  Data.HashTable.Class#v:insert. +See the documentation for this function in  Data.HashTable.Class#v:foldM. +See the documentation for this function in  Data.HashTable.Class#v:mapM_. +See the documentation for this function in  &Data.HashTable.Class#v:computeOverhead. xyz   xyz Safe-InferedA cuckoo hash table. +See the documentation for this function in  Data.HashTable.Class#v:new. +See the documentation for this function in  Data.HashTable.Class#v:newSized. +See the documentation for this function in  Data.HashTable.Class#v:insert. +See the documentation for this function in  Data.HashTable.Class#v:delete. +See the documentation for this function in  Data.HashTable.Class#v:lookup. +See the documentation for this function in  Data.HashTable.Class#v:foldM. +See the documentation for this function in  Data.HashTable.Class#v:mapM_. {| {| Safe-Infered A linear hash table. +See the documentation for this function in  Data.HashTable.Class#v:new. +See the documentation for this function in  Data.HashTable.Class#v:newSized. +See the documentation for this function in  Data.HashTable.Class#v:delete. +See the documentation for this function in  Data.HashTable.Class#v:lookup. !+See the documentation for this function in  Data.HashTable.Class#v:insert. "+See the documentation for this function in  Data.HashTable.Class#v:mapM_. #+See the documentation for this function in  Data.HashTable.Class#v:foldM. $+See the documentation for this function in  &Data.HashTable.Class#v:computeOverhead.  !"#$}~  !"#$  !"#$  !"#$}~ Safe-Infered%/A type alias for our hash tables, which run in w, to set the state  token type to  € (aka ) so that we can use them in  €. &,A type alias for the linear hash table. See Data.HashTable.ST.Linear. ',A type alias for the cuckoo hash table. See Data.HashTable.ST.Cuckoo. (AA type alias for a basic open addressing hash table using linear  probing. See Data.HashTable.ST.Basic. )+See the documentation for this function in Data.HashTable.Class#v:new. *+See the documentation for this function in  Data.HashTable.Class#v:newSized. ++See the documentation for this function in Data.HashTable.Class#v:update. ,+See the documentation for this function in Data.HashTable.Class#v:delete. -+See the documentation for this function in Data.HashTable.Class#v:lookup. .+See the documentation for this function in  Data.HashTable.Class#v:fromList. /+See the documentation for this function in Data.HashTable.Class#v:toList. 0+See the documentation for this function in Data.HashTable.Class#v:foldM. 1+See the documentation for this function in Data.HashTable.Class#v:mapM_. 2+See the documentation for this function in  &Data.HashTable.Class#v:computeOverhead. %&'()*+,-./012%&'()*+,-./012('&%)*+,-./102%&'()*+,-./012‚     !"#$%&'()*+,-./01234567 8 9 : ; < = > ? @ A B C D E F G H I J 9 : ;KLM N O P Q R S T U V W X      YZ[\]^]^]^K_`abcadefhashtables-1.0.1.4Data.HashTable.ClassData.HashTable.ST.BasicData.HashTable.ST.CuckooData.HashTable.ST.LinearData.HashTable.IO$Data.HashTable.Internal.UnsafeTricksData.HashTable.Internal.Utils2Data.HashTable.Internal.CheapPseudoRandomBitStream Data.HashTable.Internal.IntArray!Data.HashTable.Internal.CacheLineData.HashTable.Internal.Array%Data.HashTable.Internal.Linear.Bucket HashTablenewnewSizedinsertdeletelookupfoldMmapM_computeOverheadfromListtoList IOHashTableLinearHashTableCuckooHashTableBasicHashTableKey emptyRecord deletedRecord keyIsEmpty keyIsDeletedtoKeyfromKeymakeEmptyVectorwriteDeletedElementcacheLineIntMaskwordSize cacheLineSizenumWordsInCacheLinecacheLineIntBits whichBucket nextBestPrimebumpSizeshiftRLiShiftLiShiftRLnextHighestPowerOf2log2highestBitMask forceSameType BitStream newBitStream getNextBitgetNBitsIntArraynewArray readArray writeArraylengthtoPtrsign#bl_abs#mask#cacheLineSearchcacheLineSearch2cacheLineSearch3 prefetchRead prefetchWriteforwardSearch2forwardSearch3advanceByCacheLineSizeisCacheLineAlignedmaskw#primitive-0.4.1Data.Primitive.Array MutableArrayBucketbucketSplitSizenewBucketArraynelemsAndOverheadInWords emptyWithSize newBucketSize expandArrayexpandBucketArray growBucketTosnocsizebaseGHC.STST $fMonoidSlot$fShowHashTable$fHashTableHashTableControl.Monad.Primitive PrimStateghc-prim GHC.TypesIOGHC.Prim RealWorld