
Thanks all,
Got it! type rather than data and <- rather than = (should have remembered this from monad stuff). Also, don't need the qualification.
Onward and upward.
Thanks,
Michael
--- On Tue, 11/17/09, Daniel Fischer
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.
[michael@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