{
: file_create
: file_open
: file_close
: file_write
: file_write_byte
: file_read_all
: die
: run
: pure
: bind1
: lift1
: lift2
: sequence2
: sequence3
: compose
: read_file
: print_line
}
Where
Define (read_file file_name)
(bind1 (file_open file_name)
Func {file}
(lift2 (file_read_all file) (file_close file)
Func {text _} text))
Where
Define (print_line text)
Func {}
(STDIO.print_line text)
Define (file_create name)
Func {} (Prim file_create name)
Define (file_open name)
Func {} (Prim file_open name)
Define (file_close file)
Func {} (Prim file_close file)
Define (file_write file string)
Func {} (Prim file_write file string)
Define (file_write_byte file byte)
Func {} (Prim file_write_byte file byte)
Define (file_read_all file)
Func {} (Prim file_read_all file)
Define (die message)
Func {} (Prim die message)
Where
Define (run m)
(m)
Define (pure x)
Func {} x
Define (bind1 m1 f)
Func {}
Let m2 (f (m1))
In
(m2)
Define (lift1 m1 f)
Func {}
Let x1 (m1)
In
(f x1)
Define (lift2 m1 m2 f)
Func {}
Let x1 (m1)
Let x2 (m2)
In
(f x1 x2)
Define (sequence2 m1 m2)
Func {}
Begin (m1) (m2) End
Define (sequence3 m1 m2 m3)
Func {}
Begin (m1) (m2) (m3) End
Define (compose f g)
Func {x1}
Func {}
Let m1 (f x1)
In
Let x2 (m1)
In
Let m2 (g x2)
In
(m2)
Where
Let STDIO Package "stdio"