oi-0.1.0: sample/cats.hs
{-# 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)