{-# LANGUAGE BangPatterns ,TypeOperators #-} module Main where import Data.List import Data.OI import Prelude as P main :: IO () main = run pmain' pmain :: (IOResult (Resource String), ([IOResult (Resource String)], [()])) :-> () pmain = forces . (mapR id . inFileResource "files" |/| head3s) head3s :: [FilePath] -> ([IOResult (Resource String)], [()]) :-> [()] head3s xs = map (unlines . takeR (3::Int)) . zipWithOI' inFileResource xs |/| zipWithOI' (iooi . P.putStrLn) pmain' :: (IOResult (Resource String), ([IOResult (Resource String)], IOResult (Resource ()))) :-> () pmain' = mapR id . inFileResource "files" |/| head3s' head3s' :: [FilePath] -> ([IOResult (Resource String)], IOResult (Resource ())) :-> () head3s' xs = forceResult . (map (unlines . ("==========":) . takeR (3::Int)) . zipWithOI' inFileResource xs |/| outFileResource "/dev/pts/3") forceResult :: IOResult (Resource a) -> () forceResult (Success s) = forces $ map force $ stream s forceResult (Failure e) = error e main' :: IO () main' = readFile "files" >>= mapM readFile . lines >>= mapM_ putStr . intersperse "==========" . map (unlines . take 3 . lines)