From a4741d681f1fb330686d3e758ee8211da087feb6 Mon Sep 17 00:00:00 2001 From: aarne Date: Mon, 10 Nov 2003 08:48:51 +0000 Subject: Glue modules. --- src/GF/Data/Map.hs | 52 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 52 insertions(+) create mode 100644 src/GF/Data/Map.hs (limited to 'src/GF/Data/Map.hs') 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 -- cgit v1.2.3