-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathOrderedMap.hs
37 lines (26 loc) · 1.05 KB
/
OrderedMap.hs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
module OrderedMap where
import qualified Data.Map.Ordered as OMap
import qualified Data.Map as Map
type OrderedMap k v = (OMap.OMap k v)
empty :: (Ord k) => (OMap.OMap k v)
empty = OMap.empty
insert :: (Ord k) => k -> v -> (OMap.OMap k v) -> (OMap.OMap k v)
insert k v map = (OMap.>|) map (k,v)
lookup :: (Ord k) => k -> (OMap.OMap k v) -> Maybe v
lookup k map = (OMap.lookup k map)
toList :: (Ord k) => (OMap.OMap k v) -> [(k,v)]
toList map = (OMap.assocs map)
fromList :: (Ord k) => [(k,v)] -> (OMap.OMap k v)
fromList list = (OMap.fromList list)
member :: (Ord k) => k -> (OMap.OMap k v) -> Bool
member k map = (OMap.member k map)
size :: (Ord k) => (OMap.OMap k v) -> Int
size map = (OMap.size map)
keys :: (Ord k) => (OMap.OMap k v) -> [k]
keys m = (map (\e -> fst e) (toList m))
elems :: (Ord k) => (OMap.OMap k v) -> [v]
elems m = (map (\e -> snd e) (toList m))
union :: (Ord k) => (OMap.OMap k v) -> (OMap.OMap k v) -> (OMap.OMap k v)
union m1 m2 = let map1 = (toList m1)
map2 = (toList m2)
in (OMap.fromList (map1 ++ map2))