packages feed

oi-0.3.1: sample/morec.hs

{-# LANGUAGE TypeOperators #-}
module Main where

import Data.OI
import System.IO

main :: IO ()
main = do 
  hSetBuffering stdin NoBuffering
  runInteraction morec
  Prelude.putStrLn ""

(|?|) :: (a :-> c)
      -> (b :-> c)
      -> Bool
      -> (Either a b :-> c)
(|?|) = choiceOI

getc :: Char :-> Char
getc  = iooi getChar

putc :: Char -> (() :-> ())
putc  = iooi . putChar

echoc :: (Char,()) :-> ()
echoc = getc |/| putc

morec :: (Char, Either (Char, ()) ()) :-> ()
morec = ('e' ==) . getc |/| (echoc |?| putc 'q')