packages feed

swisstable-0.1.0.1: src/Data/HashTable/IO/Swiss.hs

module Data.HashTable.IO.Swiss where

import           Control.Monad.ST
import           Data.HashTable.ST.Swiss              as H
import Data.Hashable (Hashable)

new :: IO (Table RealWorld k v)
new = stToIO H.new
{-# INLINE new #-}

newSized :: (Int -> IO (Table RealWorld k v))
newSized = stToIO . H.newSized
{-# INLINE newSized #-}

insert :: (Hashable k, Eq k) => Table RealWorld k v -> k -> v -> IO ()
insert t k = stToIO . H.insert t k
{-# INLINE insert #-}

insert' :: (Hashable k, Eq k) => (k -> Int) -> Table RealWorld k v -> k -> v -> IO ()
insert' h t k = stToIO . H.insert' h t k
{-# INLINE insert' #-}

lookup :: ((Hashable k, Show k, Eq k) => Table RealWorld k a -> k -> IO (Maybe a))
lookup t = stToIO . H.lookup t
{-# INLINE lookup #-}

lookup' :: ((Hashable k, Show k, Eq k) => (k -> Int)
                  -> Table RealWorld k a -> k -> IO (Maybe a))
lookup' h t = stToIO . H.lookup' h t
{-# INLINE lookup' #-}

delete :: ((Hashable k, Show k, Eq k) => Table RealWorld k v -> k -> IO ())
delete t = stToIO . H.delete t
{-# INLINE delete #-}


getSize :: Table RealWorld k v -> IO Int
getSize  = stToIO . H.getSize
{-# INLINE getSize #-}

mutateST :: (Eq k, Hashable k)
         => Table RealWorld k v -> k -> (Maybe v -> ST RealWorld (Maybe v, a)) -> IO a
mutateST t k = stToIO . H.mutateST t k
{-# INLINE mutateST #-}

mutate :: (Eq k, Hashable k)
         => Table RealWorld k v -> k -> (Maybe v -> (Maybe v, a)) -> IO a
mutate t k = stToIO . H.mutate t k
{-# INLINE mutate #-}

mapM_ :: ((k, v) -> ST RealWorld a) -> Table RealWorld k v -> IO ()
mapM_ f = stToIO . H.mapM_ f

foldM :: (a -> (k,v) -> ST RealWorld a) -> a -> Table RealWorld k v -> IO a
foldM f i = stToIO . H.foldM f i