Add BangPatterns for an accumulator. Inline decode. Specialize take, drop.
When considering a simple benchmark [1]: let p = ((== "en") . U.take 2) print . length . filter p . U.lines =<< L.readFile . head =<< getArgs It's apparent that we are underperforming (compare to the shell script solution, this take twice as long). The accumulator of splitAt wasn't strict (used bang patterns). Also, even with -O2, the construction / destruction of the tuple for take & drop's lifting of splitAt wasn't being optimized away. Perhaps more investigation should be done re: GHC, but the cheap solution is to just duplicate code for take and drop, which is what this patch does. Original: user 0m1.704s Final: user 0m1.092s [1] http://stackoverflow.com/questions/8172889/quickly-parse-large-utf-8-text-file-in-haskell
Loading
Please register or sign in to comment