unison/unison-src/tests/console1.uu
2018-08-16 12:42:38 -04:00

47 lines
920 B
Plaintext

-- This confusingly gives an error that
-- it doesn't know what `Console.simulate` is.
effect State s where
get : {State s} s
set : s -> {State s} ()
effect Console where
read : {Console} (Optional Text)
write : Text -> {Console} ()
use Console simulate
fst x = case x of Pair.Pair a _ -> a
snd x = case x of Pair.Pair _ (Pair.Pair b _) -> b
namespace Console where
simulate : Effect Console a -> {State ([Text], [Text])} a
simulate c = case c of
{Console.read -> k} ->
io = State.get
ins = fst io
outs = snd io
State.set (drop 1 ins, outs)
todo
{Console.write t -> k} ->
io = State.get
ins = fst io
outs = snd io
todo
(++) = concatenate
handle simulate in
use Console read write
use Optional Some None
write "What's your name?"
case read of
Some name -> write ("Hello" ++ name)
None -> write "Fine, be that way."
()