mirror of
https://github.com/GrammaticalFramework/gf-core.git
synced 2026-04-11 13:59:31 -06:00
62 lines
1.3 KiB
Haskell
62 lines
1.3 KiB
Haskell
----------------------------------------------------------------------
|
|
-- |
|
|
-- Module : Map
|
|
-- Maintainer : Markus Forsberg
|
|
-- Stability : Stable
|
|
-- Portability : Haskell 98
|
|
--
|
|
-- > CVS $Date: 2005/04/21 16:22:04 $
|
|
-- > CVS $Author: bringert $
|
|
-- > CVS $Revision: 1.6 $
|
|
--
|
|
-- (Description of the module)
|
|
-----------------------------------------------------------------------------
|
|
|
|
module GF.Data.Map (
|
|
Map,
|
|
empty,
|
|
isEmpty,
|
|
(!),
|
|
(!+),
|
|
(|->),
|
|
(|->+),
|
|
(<+>),
|
|
flatten
|
|
) where
|
|
|
|
import GF.Data.RedBlack
|
|
|
|
type Map key el = Tree key el
|
|
|
|
infixl 6 |->
|
|
infixl 6 |->+
|
|
infixl 5 !
|
|
infixl 5 !+
|
|
infixl 4 <+>
|
|
|
|
empty :: Map key el
|
|
empty = emptyTree
|
|
|
|
-- | lookup operator.
|
|
(!) :: Ord key => Map key el -> key -> Maybe el
|
|
(!) fm e = lookupTree e fm
|
|
|
|
-- | lookupMany operator.
|
|
(!+) :: Ord key => Map key el -> [key] -> [Maybe el]
|
|
fm !+ [] = []
|
|
fm !+ (e:es) = (lookupTree e fm): (fm !+ es)
|
|
|
|
-- | insert operator.
|
|
(|->) :: Ord key => (key,el) -> Map key el -> Map key el
|
|
(x,y) |-> fm = insertTree (x,y) fm
|
|
|
|
-- | insertMany operator.
|
|
(|->+) :: Ord key => [(key,el)] -> Map key el -> Map key el
|
|
[] |->+ fm = fm
|
|
((x,y):xs) |->+ fm = xs |->+ (insertTree (x,y) fm)
|
|
|
|
-- | union operator.
|
|
(<+>) :: Ord key => Map key el -> Map key el -> Map key el
|
|
(<+>) fm1 fm2 = xs |->+ fm2
|
|
where xs = flatten fm1
|