module PropertyMap(ReadPropertyMap(..), ReadWritePropertyMap(..), FMap, init_map, create_map, fmap_to_list) where import FiniteMap class ReadPropertyMap pmap key value | pmap -> key, pmap -> value where get :: pmap -> key -> value class ReadPropertyMap pmap key value => ReadWritePropertyMap pmap key value where put :: pmap -> key -> value -> pmap data FMap key elt = FinMap (FiniteMap key elt) elt init_map :: Ord key => [key] -> value -> FMap key value init_map keys val = FinMap (listToFM [(k,val) | k <- keys ]) val create_map :: Ord key => [(key,value)] -> value -> FMap key value create_map alist val = FinMap (listToFM alist) val fmap_to_list :: FMap key value -> [(key,value)] fmap_to_list (FinMap fm elt) = fmToList fm instance Ord key => ReadPropertyMap (FMap key elt) key elt where get (FinMap fmap e) k = lookupWithDefaultFM fmap e k instance Ord key => ReadWritePropertyMap (FMap key elt) key elt where put (FinMap fmap e) k v = (FinMap (addToFM (delFromFM fmap k) k v) e)