packages feed

caledon-3.1.0.0: prelude/io.ncc

#include <strings.ncc>
#include <combinators.ncc>

---------------
-- builtins ---
---------------

defn putChar    :  char -> prop -- builtin
   | putCharImp = [A] putChar A

-- for sequencing io actions
fixity left 1 ,
defn io : prop
   | do = io
   | ,  = io -> prop -> io 

defn run : io -> prop
   | runDo = run do
   | runSeq = run (Av , Bv) <- run Av
                            <- Bv

defn readLine    : (string -> io) -> prop -- builtin 
   | readLineImp = [Foo : string -> io] [A : string] readLine Foo <- run (Foo A)


----------------
--- printing ---
----------------

defn putStr : string -> prop
   | putStr_Nil = putStr nil
   | putStr_Cons = putStr (cons V L)
                   <- putChar V
                   <- putStr L

defn putStrLn : string -> prop
  as \S . run $ do 
              , putStr S
              , putChar '\n'