I wrote an example using directly the handlers, I would like to use 
Pipe.Cliff that manage the lower part for me 
and use directly pipes instead of the Handle.
In this example the client send 'command' to cat and output the response.

Does this seams reasonable?

-- CODE --
{-# LANGUAGE OverloadedStrings #-}
import Pipes
import Pipes.Core
import Control.Monad (unless)
import System.Process
import qualified System.IO as IO

createServer :: MonadIO m => IO.Handle -> IO.Handle -> String -> Server 
String String m ()
createServer hin hout input = do
  liftIO $ IO.hPutStrLn hin input
  eof <- liftIO $ IO.hIsEOF hout
  unless eof $ do
    output <- liftIO $ IO.hGetLine hout
    input' <- respond output
    createServer hin hout input'

client :: MonadIO m => Client String String m ()
client = do
  reply <- request "Hello"
  liftIO $ IO.putStrLn $ "The reply is: " ++ reply
  reply <- request "World"
  liftIO $ IO.putStrLn $ "The reply is: " ++ reply

main = do
  (Just hin, Just hout, _, ph) <-
    createProcess (proc "cat" []){ std_in = CreatePipe, std_out = 
CreatePipe }
  IO.hSetBuffering hin IO.NoBuffering
  runEffect $ (createServer hin hout) +>> client
  IO.hClose hin
  System.Process.waitForProcess ph

-- 
You received this message because you are subscribed to the Google Groups 
"Haskell Pipes" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to haskell-pipes+unsubscr...@googlegroups.com.
To post to this group, send email to haskell-pipes@googlegroups.com.

Reply via email to