---------------------------------------------------------------------------- -- -- Module : AssocList.hs -- Copyright : (C) 2000-2002 Joe English. Freely redistributable. -- License : "MIT-style" -- -- Author : Joe English -- Stability : provisional -- Portability : portable -- -- CVS : $Id: AssocList.hs,v 1.5 2002/10/12 01:58:56 joe Exp $ -- ---------------------------------------------------------------------------- -- -- Quick hack; need a stub FiniteMap implementation -- module AssocList ( FM, unsafeLookup, lookupM, lookupWithDefault, empty , insert , insertWith ) where import Prelude -- hiding (null,map,foldr,foldl,foldr1,foldl1,filter) type FM k a = [(k,a)] lookupM :: (Eq k) => FM k a -> k -> Maybe a lookupM = flip Prelude.lookup lookupWithDefault :: (Eq key) => FM key elt -> elt -> key -> elt lookupWithDefault m d = maybe d id . lookupM m unsafeLookup :: (Eq a) => FM a b -> a -> b unsafeLookup m = maybe (error "Error: Not found") id . lookupM m insertWith :: (Eq k) => (a -> a -> a) -> k -> a -> FM k a -> FM k a insertWith _ key elt [] = [(key,elt)] insertWith c key elt ((k,e):l) | k == key = (k,c e elt):l | otherwise = (k,e):insertWith c key elt l insert :: (Eq k) => k -> a -> FM k a -> FM k a insert = insertWith (\_old new -> new) {- -- GHC 'data' library convention: addToFM_C :: (elt -> elt -> elt) -> FM key elt -> key -> elt -> FM key elt addToFM :: FM key elt -> key -> elt -> FM key elt lookupFM :: FM key elt -> key -> Maybe elt lookupWithDefaultFM :: FM key elt -> elt -> key -> elt -} empty :: FM a b empty = [] -- EOF --