packages feed

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)