module File( countLines ) where import qualified System.IO as IO countLines :: FilePath -> IO Int countLines f = do h <- IO.openFile f IO.ReadMode e <- IO.hIsEOF h if e then IO.hClose h >> return 0 else countLinesTail h 0 countLinesTail :: IO.Handle -> Int -> IO Int countLinesTail h n = do t <- IO.hGetLine h e <- IO.hIsEOF h if e then IO.hClose h >> return (n + 1) else countLinesTail h (n + 1)