Idris2/tests/idris2/real001/TestProto.idr
Edwin Brady c9b20911e1 Add linear pair/dependent pair to the prelude
I'm playing with some linear structures and finding these useful a lot,
so good to have a consistent syntax for it. '#' is chosen because it's
short, looks a bit like a cross if you look at it from the right angle
(!) and so as not to clash with '@@' in preorder reasoning syntax.
2020-06-12 11:18:12 +01:00

45 lines
1.1 KiB
Idris

module Main
import Channel
import Linear
import System
TestProto : Protocol ()
TestProto
= do b <- Request Bool
if b
then do Respond Char; Done
else do Respond String; Done
testClient : (1 chan : Client TestProto) -> Any IO ()
testClient chan
= do lift $ putStrLn "Starting client"
lift $ sleep 1
lift $ putStrLn "Sending value"
chan <- send chan False
lift $ putStrLn "Sent"
c # chan <- recv chan
lift $ putStrLn ("Result: " ++ c)
close chan
testServer : (1 chan : Server TestProto) -> Any IO ()
testServer chan
= do lift $ putStrLn "Waiting"
cmd # chan <- recv chan
lift $ putStrLn ("Received " ++ show cmd)
lift $ sleep 1
lift $ putStrLn "Sending answer"
if cmd
then do chan <- send chan 'a'
close chan
else do chan <- send chan "Foo"
close chan
lmain : Any IO ()
lmain
= do chan <- Channel.fork testServer
testClient chan
main : IO ()
main = run lmain