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