identifiers-0.4.3.0: Numeric identifiers for values.

Copyright(c) Adam Wagner 2017
Safe HaskellNone
LanguageHaskell2010

Data.Identifiers.ListLike

Contents

Description

Identifiers for ListLike values.

Example usage:

>>> xs = fromList ["foo", "bar", "baz", "foo"]
>>> lookupId xs "baz"
Just 2
>>> lookupKey xs 2
Just "baz"

Synopsis

Documentation

data Identifiers i n u Source #

Instances

(Eq n, Eq i, Eq u) => Eq (Identifiers i n u) Source # 

Methods

(==) :: Identifiers i n u -> Identifiers i n u -> Bool #

(/=) :: Identifiers i n u -> Identifiers i n u -> Bool #

Show n => Show (Identifiers i n u) Source # 

Methods

showsPrec :: Int -> Identifiers i n u -> ShowS #

show :: Identifiers i n u -> String #

showList :: [Identifiers i n u] -> ShowS #

(Binary n, ListLike n u, Integral i, Eq u) => Binary (Identifiers i n u) Source # 

Methods

put :: Identifiers i n u -> Put #

get :: Get (Identifiers i n u) #

putList :: [Identifiers i n u] -> Put #

(Serialize n, ListLike n u, Integral i, Eq u) => Serialize (Identifiers i n u) Source # 

Methods

put :: Putter (Identifiers i n u) #

get :: Get (Identifiers i n u) #

(NFData i, NFData n, NFData u) => NFData (Identifiers i n u) Source # 

Methods

rnf :: Identifiers i n u -> () #

Construction

empty :: Identifiers i n u Source #

The empty Identifiers

fromList :: (ListLike n u, Eq u, Integral i) => [n] -> Identifiers i n u Source #

New Identifiers from list

combine :: (ListLike n u, Integral i, Eq u) => Identifiers i n u -> Identifiers i n u -> (Identifiers i n u, Map i i) Source #

Combine two identifier sets into one. Because the ids will change while combining two sets, a map is also returned that identifies the new location of old ids for the second set passed in.

Insertion

insert :: (ListLike n u, Eq u, Integral i) => Identifiers i n u -> n -> Identifiers i n u Source #

Insert item into set (given it a new id)

insertMany :: (ListLike n u, Eq u, Integral i) => Identifiers i n u -> [n] -> Identifiers i n u Source #

Insert many items into set

Info

size :: Identifiers i n u -> Int Source #

Number of items in Identifiers value

Extraction

toList :: Identifiers i n u -> [n] Source #

New List from Identifiers

Lookups

lookupId :: (Eq u, ListLike n u) => Identifiers i n u -> n -> Maybe i Source #

Find id for given value

lookupKey :: Integral i => Identifiers i n u -> i -> Maybe n Source #

Find key for given id

lookupKeys :: Integral i => Identifiers i n u -> [i] -> [n] Source #

Given many ids, return many keys. Ids with no associated values will be omitted from the resulting list.

unsafeLookupId :: (ListLike n u, Eq u) => Identifiers i n u -> n -> i Source #

Find numeric id for given value. Will error when the value is not a member of the Identifiers map.

unsafeLookupKey :: Integral i => Identifiers i n u -> i -> n Source #

Find id for given value. Will error when the id has no associated value.

(!) :: Integral i => Identifiers i n u -> i -> n Source #

Infix version of unsafeLookupKey

Properties

prop_hasId :: String -> Bool Source #

Items inserted are given ids

prop_stableId :: String -> Bool Source #

Inserted items have stable ids

prop_keyRetrieval :: [String] -> Bool Source #

Given id can be used to fetch inserted item

prop_keyRetrievalUnsafe :: [String] -> Bool Source #

Given id can be used to fetch inserted item

prop_idempotent :: String -> Bool Source #

Inserting something more than once does not change the set

prop_stableCombine :: [String] -> [String] -> Bool Source #

Ids for the first set passed to combine remain unchanged

prop_properMigration :: [String] -> [String] -> Bool Source #

Ensure the migration points to the same value in both old and new sets