oi-0.2.0.1: sample/catsLIO.hs
module Main where
import System.Environment
import System.IO hiding (readFile, writeFile)
import System.IO.Unsafe
import Prelude hiding (readFile, writeFile)
main :: IO ()
main = do
args <- getArgs
contents <- if not $ null args
then do
sequenceLz $ map readFile args
else do
files <- readFile "files"
sequenceLz $ map readFile (lines files)
writeFile "output.txt" (concatMap textproc contents)
textproc :: String -> String
textproc = id -- unlines . take 1 . lines
lazy :: IO a -> IO a
lazy = unsafeInterleaveIO
mapLzM :: (a -> IO b) -> [a] -> IO [b]
mapLzM = (sequenceLz .) . map
sequenceLz :: [IO a] -> IO [a]
sequenceLz [] = lazy $ return []
sequenceLz (i:is) = lazy $ do
r <- lazy i
rs <- sequenceLz is
return (r:rs)
readFile :: String -> IO String
readFile f = do
h <- openFile f ReadMode
cs <- hGetContents h
return cs
writeFile :: String -> String -> IO ()
writeFile f cs = do
h <- openFile f WriteMode
r <- hPutStr h cs
return r