[Haskell-cafe] Streaming bytes and performance

Konstantin Litvinenko to.darkangel at gmail.com
Tue Mar 19 22:01:40 CET 2013


On 03/19/2013 10:53 PM, Nicolas Trangez wrote:
> On Tue, 2013-03-19 at 20:32 +0000, Don Stewart wrote:
>> So about 8x faster. Waiting for some non-lazy bytestring benchmarks... :)
>
> You could try something like this using Conduit:
>
> {-# LANGUAGE BangPatterns #-}
> module Main (main) where
>
> import Data.Conduit
> import qualified Data.Conduit.List as L
> import qualified Data.Conduit.Binary as B
> import qualified Data.ByteString.Char8 as BS8
>
> main :: IO ()
> main = print =<< runResourceT (
>      B.sourceFile filename $$ L.fold (\(!a) (!b) -> a + BS8.count ' ' b)
> (0 :: Int))
>    where
>      filename = ...

Please stops counting spaces! :) It was a MODEL that demonstrates 
constant allocation of state when I used State monad. That's the 
*problem*. I mention in my first email that I do know how to count 
spaces using one-line L.foldl with no allocations at all :).




More information about the Haskell-Cafe mailing list