[Haskell-cafe] Optimizing a title matcher
Bertram Felgenhauer
bertram.felgenhauer at googlemail.com
Tue Sep 26 22:49:41 EDT 2006
Lyle Kopnicky wrote:
[snip]
> data TextTable s = TextTable { tableFields :: ![s],
> keyFieldIndex :: !Int,
> tableRecords :: !(HashTable s (Array Int s)) }
[snip]
> listRecords :: AbsString s => TextTable s -> IO [TextRecord s]
> listRecords (TextTable fields _ records) = do
> keyRecs <- HT.toList records
> return $ map (fromList . zip fields . elems . snd) keyRecs
Doing fromList again and again can't be good. Why don't you make
tableFields a map that maps names to array indices? Then you can just
pass the bare arrays along, and the later lookups will be cheaper, too.
Now due to lazyness this will probably be evaluated in matchscore,
because before that the resulting Map isn't used. Which is exactly where
you said a lot (most?) of the time is spent.
Another thing is that you should compile your code with -O, but I guess
you are already doing that.
Hope this helps,
Bertram
More information about the Haskell-Cafe
mailing list