Am Dienstag 17 November 2009 20:16:50 schrieb michael rice: > I'm trying to create a hash table. Yeah, I know, don't use hash tables, but > I need to create something I'm familiar with, not something I've never > worked with before. What's wrong with this code? > > Michael > > ==================== > > import Prelude hiding (lookup) > import Data.HashTable > > data MyHashTable = HashTable String Int > > dummy:: String -> Int > dummy s = 7 > > ht = MyHashTable.new (==) dummy > > ====================
MyHashTable.new is parsed as a qualified function, 'new' from the module MyHashTable. But there's no module MyHashTable imported, hence there's no function 'new' from that module in scope. > > [mich...@localhost ~]$ ghci hash1 > GHCi, version 6.10.3: http://www.haskell.org/ghc/ :? for help > Loading package ghc-prim ... linking ... done. > Loading package integer ... linking ... done. > Loading package base ... linking ... done. > [1 of 1] Compiling Main ( hash1.hs, interpreted ) > > hash1.hs:9:5: Not in scope: `MyHashTable.new' > Failed, modules loaded: none. > Prelude> If we look at the type of Data.HashTable.new: new :: (key -> key -> Bool) -> (key -> GHC.Int.Int32) -> IO (HashTable key val) we see that new (==) dummy (or Data.HashTable.new (==) dummy, but we don't need to qualify new) has type IO (HashTable String val), so is an IO-action returning a hashtable. What you probably wanted was type MyHashTable = HashTable String Int -- not data MyHashTable ht <- new (==) dummy :: IO MyHashTable then ht is a hashtable of type MyHashTable. _______________________________________________ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe