So the Haskell's not actually fully parsing the data, it's returning a lazy value that will do some of the work later? It's a perfectly good approach, but it means the performance comparison isn't really fair - the Haskell approach would slow down the rest of your program if you were actually using the value you parsed.<p>Comparing the line count between a program that uses a library and one that parses by hand is also somewhat unfair.