Data.Map
Operators
Prelude Data.Map> fromList [(5,'a'), (3,'b')] ! 5
'a'
Prelude Data.Map> fromList [(5, 'a'), (3, 'b')] !? 1
Nothing
Prelude Data.Map> fromList [(5, 'a'), (3, 'b')] !? 5
Just 'a'
Query
Prelude Data.Map> Data.Map.null (singleton 1 'a')
False
Prelude Data.Map> size (fromList([(1,'a'), (2,'c'), (3,'b')]))
3
Prelude Data.Map> member 5 (fromList [(5,'a'), (3,'b')])
True
Prelude Data.Map> Data.Map.lookup "John" (fromList [("John","Sales"), ("Bob","IT")])
Just "Sales"
Prelude Data.Map> findWithDefault 'x' 1 (fromList [(5,'a'), (3,'b')])
'x'
Prelude Data.Map> findWithDefault 'x' 5 (fromList [(5,'a'), (3,'b')])
'a'
Construction
Prelude Data.Map> singleton 1 'a'
fromList [(1,'a')]
Prelude Data.Map> empty
fromList []
Insertion
Prelude Data.Map> insert 5 'x' (fromList [(5,'a'), (3,'b')])
fromList [(3,'b'),(5,'x')]
Prelude Data.Map> insert 7 'x' (fromList [(5,'a'), (3,'b')])
fromList [(3,'b'),(5,'a'),(7,'x')]
Prelude Data.Map> insert 5 'x' empty
fromList [(5,'x')]
Delete/Update
Prelude Data.Map> delete 5 (fromList [(5,"a"), (3,"b")])
fromList [(3,"b")]
Prelude Data.Map> adjust ("new " ++) 5 (fromList [(5,"a"), (3,"b")])
fromList [(3,"b"),(5,"new a")]
Prelude Data.Map> let f x = if x == "a" then Just "new a" else Nothing
Prelude Data.Map> update f 5 (fromList [(5,"a"), (3,"b")])
fromList [(3,"b"),(5,"new a")]
Prelude Data.Map> let f _ = Nothing
Prelude Data.Map> alter f 5 (fromList [(5,"a"), (3,"b")])
fromList [(3,"b")]
Prelude Data.Map> let f _ = Just "c"
Prelude Data.Map> alter f 7 (fromList [(5,"a"), (3,"b")])
fromList [(3,"b"),(5,"a"),(7,"c")]
Combine
Prelude Data.Map> union (fromList [(5, "a"), (3, "b")]) (fromList [(5, "A"), (7, "C")])
fromList [(3,"b"),(5,"a"),(7,"C")]
Prelude Data.Map> unions [(fromList [(5, "a"), (3, "b")]), (fromList [(5, "A"), (7, "C")]), (fromList [(5, "A3"), (3, "B3")])]
fromList [(3,"b"),(5,"a"),(7,"C")]
Difference
Prelude Data.Map> difference (fromList [(5, "a"), (3, "b")]) (fromList [(5, "A"), (7, "C")])
fromList [(3,"b")]
Intersection
Prelude Data.Map> intersection (fromList [(5, "a"), (3, "b")]) (fromList [(5, "A"), (7, "C")])
fromList [(5,"a")]
Traversal
Prelude Data.Map> Data.Map.map (++ "x") (fromList [(5,"a"), (3,"b")])
fromList [(3,"bx"),(5,"ax")]
Prelude Data.Map> traverseWithKey (\k v -> if odd k then Just (succ v) else Nothing) (fromList [(1, 'a'), (5, 'e')])
Just (fromList [(1,'b'),(5,'f')])
Prelude Data.Map> let f a b = (a ++ b, b ++ "X")
Prelude Data.Map> mapAccum f "Everything: " (fromList [(5,"a"), (3,"b")])
("Everything: ba",fromList [(3,"bX"),(5,"aX")])
Prelude Data.Map> mapKeys (+ 1) (fromList [(5,"a"), (3,"b")])
fromList [(4,"b"),(6,"a")]
Folds
Prelude Data.Map> let f a len = len + (length a)
Prelude Data.Map> Data.Map.foldr f 0 (fromList [(5,"a"), (3,"bbb")])
4
Prelude Data.Map> let f len a = len + (length a)
Prelude Data.Map> Data.Map.foldl f 0 (fromList [(5,"a"), (3,"bbb")])
4
Conversion
Prelude Data.Map> elems (fromList [(5,"a"), (3,"b")])
["b","a"]
Prelude Data.Map> keys (fromList [(5,"a"), (3,"b")])
[3,5]
Prelude Data.Map> assocs (fromList [(5,"a"), (3,"b")])
[(3,"b"),(5,"a")]
Lists
Prelude Data.Map> toList (fromList [(5,"a"), (3,"b")])
[(3,"b"),(5,"a")]
Prelude Data.Map> fromList [(5,"a"), (3,"b"), (5, "c")]
fromList [(3,"b"),(5,"c")]
Prelude Data.Map> fromListWith (++) [(5,"a"), (5,"b"), (3,"b"), (3,"a"), (5,"a")]
fromList [(3,"ab"),(5,"aba")]
Ordered lists
Prelude Data.Map> toAscList (fromList [(5,"a"), (3,"b")])
[(3,"b"),(5,"a")]
Prelude Data.Map> toDescList (fromList [(5,"a"), (3,"b")])
[(5,"a"),(3,"b")]
Prelude Data.Map> fromAscList [(3,"b"), (5,"a")]
fromList [(3,"b"),(5,"a")]
Prelude Data.Map> fromDescList [(5,"a"), (3,"b")]
fromList [(3,"b"),(5,"a")]
Filter
Prelude Data.Map> Data.Map.filter (> "a") (fromList [(5,"a"), (3,"b")])
fromList [(3,"b")]
Prelude Data.Map> partition (> "a") (fromList [(5,"a"), (3,"b")])
(fromList [(3,"b")],fromList [(5,"a")])
Prelude Data.Map> let f x = if x == "a" then Just "new a" else Nothing
Prelude Data.Map> mapMaybe f (fromList [(5,"a"), (3,"b")])
fromList [(5,"new a")]
Prelude Data.Map> split 4 (fromList [(5,"a"), (3,"b")])
(fromList [(3,"b")],fromList [(5,"a")])
Submap
Prelude Data.Map> isSubmapOfBy (==) (fromList [('a',1)]) (fromList [('a',1),('b',2)])
True
Prelude Data.Map> isSubmapOfBy (<=) (fromList [('a',1)]) (fromList [('a',1),('b',2)])
True
Prelude Data.Map> isSubmapOfBy (<) (fromList [('a',1)]) (fromList [('a',1),('b',2)])
False
Indexed
Prelude Data.Map> lookupIndex 2 (fromList [(5,"a"), (3,"b")])
Nothing
Prelude Data.Map> lookupIndex 3 (fromList [(5,"a"), (3,"b")])
Just 0
Prelude Data.Map> findIndex 3 (fromList [(5,"a"), (3,"b")])
0
Prelude Data.Map> elemAt 0 (fromList [(5,"a"), (3,"b")])
(3,"b")
Prelude Data.Map> elemAt 1 (fromList [(5,"a"), (3,"b")])
(5,"a")
Prelude Data.Map> updateAt (\ _ _ -> Just "x") 0 (fromList [(5,"a"), (3,"b")])
fromList [(3,"x"),(5,"a")]
Prelude Data.Map> deleteAt 0 (fromList [(5,"a"), (3,"b")])
fromList [(5,"a")]
Min/Max
Prelude Data.Map> lookupMin (fromList [(5,"a"), (3,"b")])
Just (3,"b")
Prelude Data.Map> lookupMax (fromList [(5,"a"), (3,"b")])
Just (5,"a")
Prelude Data.Map> findMin (fromList [(5,"a"), (3,"b")])
(3,"b")
Prelude Data.Map> findMax (fromList [(5,"a"), (3,"b")])
(5,"a")
Prelude Data.Map> deleteMin (fromList [(5,"a"), (3,"b"), (7,"c")])
fromList [(5,"a"),(7,"c")]
Prelude Data.Map> updateMax (\ a -> Just ("X" ++ a)) (fromList [(5,"a"), (3,"b")])
fromList [(3,"b"),(5,"Xa")]
Debugging
Prelude Data.Map> valid (fromAscList [(3,"b"), (5,"a")])
True
Prelude Data.Map> valid (fromAscList [(5,"a"), (3,"b")])
False