Hash table constructors return table in IO Monad. Why?

Is there some reason why ALL the ways to create a hash table return one in the IO Monad, but all the functions for retrieving a value from a hash table take as an argument a hash table NOT in the IO Monad? Michael ================= Prelude Data.HashTable> let ht = fromList id [(5,'a'),(6,'b')]Prelude Data.HashTable> fmap ((flip Data.HashTable.lookup) 6) htPrelude Data.HashTable> Prelude Data.HashTable> :t fmap ((flip Data.HashTable.lookup) 6) htfmap ((flip Data.HashTable.lookup) 6) ht :: IO (IO (Maybe Char))

The hashtable needs to be been created in IO, after that, think of the 'hashtable' as a analogous to a file handle. You have to pass it around to do anything with it - but the only things you can do with it are in IO. (That's why no-one really likes it, of course...)

On Thu, May 12, 2011 at 9:22 AM, Stephen Tetley
The hashtable needs to be been created in IO, after that, think of the 'hashtable' as a analogous to a file handle. You have to pass it around to do anything with it - but the only things you can do with it are in IO.
The appropriate pure package to be using instead is unordered-containers.

Thanks, Bryan and Stephan.
I seem to remember playing around with a data structure that accumulates (in a list) different values associated with an identical key, i.e.,
insert data-structure "abc" 5insert data-structure "abc" 6
retrieve data-structure "abc" -> [5,6]
HashTable doesn't do it. Neither does Map. Was I dreaming?
Michael
--- On Thu, 5/12/11, Bryan O'Sullivan

I guess everyone has weighed in. I must have been hallucinating.
Yes, this will work.
Thanks,
Michael
--- On Thu, 5/12/11, Bryan O'Sullivan
participants (4)
-
Bryan O'Sullivan
-
michael rice
-
Ozgur Akgun
-
Stephen Tetley