
John Smith
Yes, I see. Good points in both answers, but I still would like to see how to do it with the mutable hash, if possible...
test = do h <- H.new (==) id h1 <- H.new (==) id H.insert h 3 h1 H.insert h1 1 1000 inner <- H.lookup h 3 case inner of Nothing -> return Nothing Just outer -> H.lookup outer 1000 you forgot to lift the Nothing into the IO monad. I like this one: lookup' :: key -> b -> HashTable key (HashTable b val) -> IO (Maybe val) lookup' k l h = H.lookup h k >>= maybe (return Nothing) ((flip H.lookup) l) test' = do h <- H.new (==) id h1 <- H.new (==) id H.insert h 3 h1 H.insert h1 1 1000 lookup' 3 1000 h -- (c) this sig last receiving data processing entity. Inspect headers for copyright history. All rights reserved. Copying, hiring, renting, performance and/or quoting of this signature prohibited.