packages feed

oi-0.1.1: sample/catsLIO.hs

module Main where

import System.Environment
import System.IO
import System.IO.Unsafe
import Prelude

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)