iteratee-0.3.1: Examples/word.hs
-- A simple wc-like program using Data.Iteratee
module Main where
import Prelude as P
import Data.Iteratee
import Data.Iteratee.Char as C
import System
-- An iteratee to calculate the number of characters in a stream. Very basic.
numChars :: Monad m => IterateeG [] el m Int
numChars = C.length
-- An iteratee to calculate the number of words in a stream.
numWords :: (Monad m, Functor m) => IterateeG [] Char m Int
numWords = joinI $ enumWords C.length
-- Count the number of lines, similar to numWords
numLines :: (Monad m, Functor m) => IterateeG [] Char m Int
numLines = joinI $ enumLines C.length
main = do
f:_ <- getArgs
words <- fileDriver (numLines `enumPair` numWords `enumPair` numChars) f
print words