parameterized-utils-1.0.0: Classes and data structures for working with data-kind indexed types

Copyright(c) Galois Inc 2014
MaintainerJoe Hendrix <jhendrix@galois.com>
Safe HaskellTrustworthy
LanguageHaskell98

Data.Parameterized.HashTable

Description

This module provides a ST-based hashtable for parameterized keys and values.

NOTE: This API makes use of unsafeCoerce to implement the parameterized hashtable abstraction. This should be typesafe provided the TestEquality instance on the key type is implemented soundly.

Synopsis

Documentation

data HashTable s (key :: k -> *) (val :: k -> *) Source #

A hash table mapping nonces to values.

new :: ST s (HashTable s key val) Source #

Create a new empty table.

newSized :: Int -> ST s (HashTable s k v) Source #

Create a new empty table to hold n elements.

clone :: (HashableF key, TestEquality key) => HashTable s key val -> ST s (HashTable s key val) Source #

Create a hash table that is a copy of the current one.

lookup :: (HashableF key, TestEquality key) => HashTable s key val -> key tp -> ST s (Maybe (val tp)) Source #

Lookup value of key in table.

insert :: (HashableF key, TestEquality key) => HashTable s (key :: k -> *) (val :: k -> *) -> key tp -> val tp -> ST s () Source #

Insert new key and value mapping into table.

member :: (HashableF key, TestEquality key) => HashTable s (key :: k -> *) (val :: k -> *) -> key (tp :: k) -> ST s Bool Source #

Return true if the key is in the hash table.

delete :: (HashableF key, TestEquality key) => HashTable s (key :: k -> *) (val :: k -> *) -> key (tp :: k) -> ST s () Source #

Delete an element from the hash table.

clear :: (HashableF key, TestEquality key) => HashTable s (key :: k -> *) (val :: k -> *) -> ST s () Source #

class HashableF (f :: k -> *) where Source #

A parameterized type that is hashable on all instances.

Minimal complete definition

hashWithSaltF

Methods

hashWithSaltF :: Int -> f tp -> Int Source #

hashF :: f tp -> Int Source #

Hash with default salt.

Instances

HashableF Nat NatRepr Source # 

Methods

hashWithSaltF :: Int -> f tp -> Int Source #

hashF :: f tp -> Int Source #

HashableF Symbol SymbolRepr Source # 

Methods

hashWithSaltF :: Int -> f tp -> Int Source #

hashF :: f tp -> Int Source #

HashableF k (Nonce k) Source # 

Methods

hashWithSaltF :: Int -> f tp -> Int Source #

hashF :: f tp -> Int Source #

Hashable a => HashableF k (Const k a) Source # 

Methods

hashWithSaltF :: Int -> f tp -> Int Source #

hashF :: f tp -> Int Source #

HashableF k (Nonce k s) Source # 

Methods

hashWithSaltF :: Int -> f tp -> Int Source #

hashF :: f tp -> Int Source #

HashableF k (Index k ctx) Source # 

Methods

hashWithSaltF :: Int -> f tp -> Int Source #

hashF :: f tp -> Int Source #

HashableF k (Index k ctx) Source # 

Methods

hashWithSaltF :: Int -> f tp -> Int Source #

hashF :: f tp -> Int Source #

HashableF k f => HashableF (Ctx k) (Assignment k f) Source # 

Methods

hashWithSaltF :: Int -> f tp -> Int Source #

hashF :: f tp -> Int Source #

HashableF k f => HashableF (Ctx k) (Assignment k f) Source # 

Methods

hashWithSaltF :: Int -> f tp -> Int Source #

hashF :: f tp -> Int Source #

data RealWorld :: * #

RealWorld is deeply magical. It is primitive, but it is not unlifted (hence ptrArg). We never manipulate values of type RealWorld; it's only used in the type system, to parameterise State#.