packages feed

corecursive-main-0.1.0.0: app/Main.hs

module Main where

import System.Process.Corecursive
import System.Posix.Process

newtype Arg = Arg { getListOfThings :: [String] }

numberOfThings :: Arg -> Int
numberOfThings = length . getListOfThings

append :: Show a => a -> Arg -> Arg
append x (Arg xs) = Arg (show x:xs)

main :: IO ()
main = runCorecursiveApp (app parse unparse go)
  where
    parse :: [String] -> IO Arg
    parse = pure . Arg

    unparse :: Arg -> IO [String]
    unparse = pure  . getListOfThings

    go self arg
      | numberOfThings arg > 10 = print "done"
      | otherwise               = do
          pid <- getProcessID
          dat <- readCallback self (append pid arg)
          putStr $ show pid ++ show (getListOfThings arg) ++ " " ++ dat