packages feed

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