HXQ-0.1: hxml-0.2/AssocList.hs
----------------------------------------------------------------------------
--
-- Module : AssocList.hs
-- Copyright : (C) 2000-2002 Joe English. Freely redistributable.
-- License : "MIT-style"
--
-- Author : Joe English <jenglish@flightlab.com>
-- 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 --