-- 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