Safe Haskell | None |
---|---|
Language | Haskell2010 |
A dictionary mapping unique keys to values. The keys can be any comparable
type. This includes Int
, Float
, Time
, Char
, String
, and tuples or
lists of comparable types.
Insert, remove, and query operations all take _O(log n)_ time.
Synopsis
- type Dict k v = Map k v
- empty :: Dict k v
- singleton :: comparable -> v -> Dict comparable v
- insert :: Ord comparable => comparable -> v -> Dict comparable v -> Dict comparable v
- update :: Ord comparable => comparable -> (Maybe v -> Maybe v) -> Dict comparable v -> Dict comparable v
- remove :: Ord comparable => comparable -> Dict comparable v -> Dict comparable v
- isEmpty :: Dict k v -> Bool
- member :: Ord comparable => comparable -> Dict comparable v -> Bool
- get :: Ord comparable => comparable -> Dict comparable v -> Maybe v
- size :: Dict k v -> Int
- keys :: Dict k v -> List k
- values :: Dict k v -> List v
- toList :: Dict k v -> List (k, v)
- fromList :: Ord comparable => List (comparable, v) -> Dict comparable v
- map :: (k -> a -> b) -> Dict k a -> Dict k b
- foldl :: (k -> v -> b -> b) -> b -> Dict k v -> b
- foldr :: (k -> v -> b -> b) -> b -> Dict k v -> b
- filter :: (comparable -> v -> Bool) -> Dict comparable v -> Dict comparable v
- partition :: (comparable -> v -> Bool) -> Dict comparable v -> (Dict comparable v, Dict comparable v)
- union :: Ord comparable => Dict comparable v -> Dict comparable v -> Dict comparable v
- intersect :: Ord comparable => Dict comparable v -> Dict comparable v -> Dict comparable v
- diff :: Ord comparable => Dict comparable a -> Dict comparable b -> Dict comparable a
- merge :: Ord comparable => (comparable -> a -> result -> result) -> (comparable -> a -> b -> result -> result) -> (comparable -> b -> result -> result) -> Dict comparable a -> Dict comparable b -> result -> result
Dictionaries
type Dict k v = Map k v Source #
A dictionary of keys and values. So a Dict String User
is a dictionary
that lets you look up a String
(such as user names) and find the associated
User
.
import Dict exposing (Dict) users : Dict String User users = Dict.fromList [ ("Alice", User "Alice" 28 1.65) , ("Bob" , User "Bob" 19 1.82) , ("Chuck", User "Chuck" 33 1.75) ] type alias User = { name : String , age : Int , height : Float }
Build
singleton :: comparable -> v -> Dict comparable v Source #
Create a dictionary with one key-value pair.
insert :: Ord comparable => comparable -> v -> Dict comparable v -> Dict comparable v Source #
Insert a key-value pair into a dictionary. Replaces value when there is a collision.
update :: Ord comparable => comparable -> (Maybe v -> Maybe v) -> Dict comparable v -> Dict comparable v Source #
Update the value of a dictionary for a specific key with a given function.
remove :: Ord comparable => comparable -> Dict comparable v -> Dict comparable v Source #
Remove a key-value pair from a dictionary. If the key is not found, no changes are made.
Query
member :: Ord comparable => comparable -> Dict comparable v -> Bool Source #
Determine if a key is in a dictionary.
get :: Ord comparable => comparable -> Dict comparable v -> Maybe v Source #
Get the value associated with a key. If the key is not found, return
Nothing
. This is useful when you are not sure if a key will be in the
dictionary.
animals = fromList [ ("Tom", Cat), ("Jerry", Mouse) ] get "Tom" animals == Just Cat get "Jerry" animals == Just Mouse get "Spike" animals == Nothing
Lists
keys :: Dict k v -> List k Source #
Get all of the keys in a dictionary, sorted from lowest to highest.
keys (fromList [(0,"Alice"),(1,"Bob")]) == [0,1]
values :: Dict k v -> List v Source #
Get all of the values in a dictionary, in the order of their keys.
values (fromList [(0,"Alice"),(1,"Bob")]) == ["Alice", "Bob"]
toList :: Dict k v -> List (k, v) Source #
Convert a dictionary into an association list of key-value pairs, sorted by keys.
fromList :: Ord comparable => List (comparable, v) -> Dict comparable v Source #
Convert an association list into a dictionary.
Transform
map :: (k -> a -> b) -> Dict k a -> Dict k b Source #
Apply a function to all values in a dictionary.
foldl :: (k -> v -> b -> b) -> b -> Dict k v -> b Source #
Fold over the key-value pairs in a dictionary from lowest key to highest key.
import Dict exposing (Dict) getAges : Dict String User -> List String getAges users = Dict.foldl addAge [] users addAge : String -> User -> List String -> List String addAge _ user ages = user.age :: ages -- getAges users == [33,19,28]
foldr :: (k -> v -> b -> b) -> b -> Dict k v -> b Source #
Fold over the key-value pairs in a dictionary from highest key to lowest key.
import Dict exposing (Dict) getAges : Dict String User -> List String getAges users = Dict.foldr addAge [] users addAge : String -> User -> List String -> List String addAge _ user ages = user.age :: ages -- getAges users == [28,19,33]
filter :: (comparable -> v -> Bool) -> Dict comparable v -> Dict comparable v Source #
Keep only the key-value pairs that pass the given test.
partition :: (comparable -> v -> Bool) -> Dict comparable v -> (Dict comparable v, Dict comparable v) Source #
Partition a dictionary according to some test. The first dictionary contains all key-value pairs which passed the test, and the second contains the pairs that did not.
Combine
union :: Ord comparable => Dict comparable v -> Dict comparable v -> Dict comparable v Source #
Combine two dictionaries. If there is a collision, preference is given to the first dictionary.
intersect :: Ord comparable => Dict comparable v -> Dict comparable v -> Dict comparable v Source #
Keep a key-value pair when its key appears in the second dictionary. Preference is given to values in the first dictionary.
diff :: Ord comparable => Dict comparable a -> Dict comparable b -> Dict comparable a Source #
Keep a key-value pair when its key does not appear in the second dictionary.
merge :: Ord comparable => (comparable -> a -> result -> result) -> (comparable -> a -> b -> result -> result) -> (comparable -> b -> result -> result) -> Dict comparable a -> Dict comparable b -> result -> result Source #
The most general way of combining two dictionaries. You provide three accumulators for when a given key appears:
- Only in the left dictionary.
- In both dictionaries.
- Only in the right dictionary.
You then traverse all the keys from lowest to highest, building up whatever you want.