[Haskell-cafe] Fast number parsing with strict bytestrings [Was:
Re: Seemingly subtle change causes large performance variation]
conal at conal.net
Fri Jun 8 13:47:16 EDT 2007
Perhaps a stylistic shift would encourage writing this sort of elegant,
-- Generalized version of "interact". Encapsulates data getter &
genInteract :: IO i -> (o -> IO ()) -> ((i -> o) -> IO ())
genInteract get put = \ f -> get >>= put . f
The intention here is that i and o are pure value types (no IO). Solutions
2 and three use the following specialization.
-- Lazy ByteString in and showable out
lGetPrint :: Show o => (L.ByteString -> o) -> IO ()
lGetPrint = genInteract L.getContents print
Then rewrite solution 2 as follows:
main = lGetPrint f
f contents = foldl' (test k) 0 . map int . take n $ ls
(l:ls) = L.lines contents
[n,k] = map int (L.split ' ' l)
And solution 3 similarly.
Plug: for additional examples and a more general approach to separating out
IO, my blog post "separating IO from logic -- example
which uses the TV <http://www.haskell.org/haskellwiki/TV> library.
-------------- next part --------------
An HTML attachment was scrubbed...
More information about the Haskell-Cafe