
martindemello:
I'm having a lot of trouble mixing file io and wxhaskell's varCreate/Get/Set functions. I have functions
readWords :: String -> IO WordMap wordGrid :: WordMap -> Layout
And within my GUI code, the following compiles (ignores the variable, basically):
words <- varCreate (do {w <- readWords "words"; return w}) wGrid <- do w <- readWords "words" return $ wordGrid w
but I can't get the following (noncompiling code, but it shows what I'm trying to do) working:
wGrid <- do w <- varGet words return $ wordGrid w
Could someone give me a minimal example of reading in a list of words from a file, binding a wxHaskell variable to the list, and then mapping some GUI code over it?
Here's an efficient read-words-from-file function: $ cat A.hs import qualified Data.ByteString.Char8 as S (words,readFile) import Data.ByteString (ByteString) getWords :: FilePath -> IO [ByteString] getWords f = fmap S.words (S.readFile f) main = print . length =<< getWords "/usr/share/dict/words" $ time ./A 234979 ./A 0.09s user 0.01s system 94% cpu 0.107 total If you wanted to turn this list of words into a Map, something like: buildMap :: [ByteString] -> M.Map ByteString Int buildMap xs = M.fromListWith (+) (zip xs (repeat 1)) (untested). As for wxHaskell, I'll have to defer to the ui hackers for that. -- Don