enumerator-0.1.1: Examples/enumerator-wcl.hs
module Main (main) where
import Data.Enumerator
import Data.Enumerator.IO
import qualified Data.ByteString as B
import qualified Data.ByteString.Char8 as B8
import System.IO
import System.Environment
iterLines :: Monad m => Iteratee e B.ByteString m Integer
iterLines = continue (step 0) where
step acc EOF = yield acc EOF
step acc (Chunks xs) = continue $ step $! foldl foldStep acc xs
foldStep acc bytes = acc + countChar '\n' bytes
countChar :: Char -> B.ByteString -> Integer
countChar c = B8.foldl (\acc c' -> if c' == c then acc + 1 else acc) 0
main :: IO ()
main = do
filename:_ <- getArgs
h <- openBinaryFile filename ReadMode
run (iterLines >>== enumHandle 4096 h) >>= print