Haskell/Performance Examples

Performance Examples (Solutions)
Haskell Performance

Introduction 50%.svg
Step by Step Examples 00%.svg
Graph reduction 25%.svg
Laziness 25%.svg
Time and space profiling
Strictness 00%.svg
Algorithm complexity 25%.svg
Data structures

Goal: Explain optimizations step by step with examples that actually happened.

Tight loopEdit

dons: Write Haskell as fast as C: exploiting strictness, laziness and recursion. << DEAD LINK

dons: Write Haskell as fast as C: exploiting strictness, laziness and recursion.

CSV ParsingEdit

haskell-cafe: another Newbie performance question I hope he doesn't mind if I post his code here, I still have to ask him. -- apfeλmus 08:46, 18 May 2008 (UTC)

type CSV = [[String]]

main = do
                  args <- getArgs
                  file <- readFile (head args)
                  writeFile (head args ++ "2") (processFile (args !! 1) file)

processFile s     = writeCSV . doInteraction s . readCSV
doInteraction line csv = insertLine (show line) (length csv - 1) csv
writeCSV          = (\x -> x ++ "\n") . concat . intersperse "\n" . (map (concat . intersperse "," . (map show)))
insertLine line pos csv = (take pos csv) ++ [readCSVLine line] ++ drop pos csv
readCSVLine       = read . (\x -> "["++x++"]")
readCSV           = map readCSVLine . lines

I think there was another cvs parsing thread on the mailing list which I deemed appropriate, but I can't remember.

Space LeakEdit

jkff asked about some code in #haskell which was analyzing a logfile. Basically, it was building a histogram

foldl' (\m (x,y) -> insertWith' x (\[y] ys -> y:ys) [y] m) M.empty
  [(ByteString.copy foo, ByteString.copy bar) | (foo,bar) <- map (match regex) lines]

The input was a 1GB logfile and the program blew the available memory mainly because the ByteString.copy weren't forced and the whole file lingered around in memory.

Performance Examples
Solutions to exercises
Haskell Performance

Introduction 50%.svg  >> Step by Step Examples 00%.svg  >> Graph reduction 25%.svg  >> Laziness 25%.svg  >> Time and space profiling  >> Strictness 00%.svg  >> Algorithm complexity 25%.svg  >> Data structures  >> Parallelism


Haskell Basics >> Elementary Haskell >> Intermediate Haskell >> Monads
Advanced Haskell >> Fun with Types >> Wider Theory >> Haskell Performance

Libraries Reference >> General Practices >> Specialised Tasks

Last modified on 27 September 2012, at 13:35