summaryrefslogtreecommitdiff
path: root/src/GF/Data/Map.hs
diff options
context:
space:
mode:
Diffstat (limited to 'src/GF/Data/Map.hs')
-rw-r--r--src/GF/Data/Map.hs52
1 files changed, 52 insertions, 0 deletions
diff --git a/src/GF/Data/Map.hs b/src/GF/Data/Map.hs
new file mode 100644
index 000000000..1adc0523a
--- /dev/null
+++ b/src/GF/Data/Map.hs
@@ -0,0 +1,52 @@
+{-
+ **************************************************************
+ * Filename : Map.hs *
+ * Author : Markus Forsberg *
+ * markus@cs.chalmers.se *
+ * Last Modified : 15 December, 2001 *
+ * Lines : 53 *
+ **************************************************************
+-}
+
+module Map
+ (
+ Map,
+ empty,
+ (!), -- lookup operator.
+ (!+), -- lookupMany operator.
+ (|->), -- insert operator.
+ (|->+), -- insertMany operator.
+ (<+>), -- union operator.
+ flatten --
+ ) where
+
+import RedBlack
+
+type Map key el = Tree key el
+
+infixl 6 |->
+infixl 6 |->+
+infixl 5 !
+infixl 5 !+
+infixl 4 <+>
+
+empty :: Map key el
+empty = emptyTree
+
+(!) :: Ord key => Map key el -> key -> Maybe el
+fm ! e = lookupTree e fm
+
+(!+) :: Ord key => Map key el -> [key] -> [Maybe el]
+fm !+ [] = []
+fm !+ (e:es) = (lookupTree e fm): (fm !+ es)
+
+(|->) :: Ord key => (key,el) -> Map key el -> Map key el
+(x,y) |-> fm = insertTree (x,y) fm
+
+(|->+) :: Ord key => [(key,el)] -> Map key el -> Map key el
+[] |->+ fm = fm
+((x,y):xs) |->+ fm = xs |->+ (insertTree (x,y) fm)
+
+(<+>) :: Ord key => Map key el -> Map key el -> Map key el
+(<+>) fm1 fm2 = xs |->+ fm2
+ where xs = flatten fm1