module Data.Homeomorphic.NAME( Homeomorphic, empty, insert, find, findOne ) where import Data.Homeomorphic.Internal import Data.Maybe import Data.List(foldl') import qualified Data.Set as Set import qualified Data.IntMap as IntMap data Homeomorphic k v = Homeomorphic [(Shell k, Hash k, v)] empty :: Homeomorphic k v empty = Homeomorphic [] insert :: Ord k => Shell k -> v -> Homeomorphic k v -> Homeomorphic k v insert k v (Homeomorphic xs) = Homeomorphic ((k,calcHash k,v):xs) find :: Ord k => Shell k -> Homeomorphic k v -> [v] find k (Homeomorphic xs) = [c | (a,b,c) <- xs, check b, a <<| k] where check = checkHash k findOne :: Ord k => Shell k -> Homeomorphic k v -> Maybe v findOne k = listToMaybe . find k