egison-2.4.6: sample/io/copy.egi
(define $main
(lambda [$world $argv]
(match argv (List String)
{[<cons $file1 <cons $file2 <nil>>>
(do {[[$world $port1] (open-input-file world file1)]
[[$world $port2] (open-output-file world file2)]}
(letrec {[$copyLoop (lambda [$world]
(do {[[$world $line] (read-line-from-port world port1)]}
(if (eof? line)
world
(do {[$world (write-string-to-port world port2 line)]
[$world (write-char-to-port world port2 '\n')]}
(copyLoop world)))))]}
(do {[$world (copyLoop world)]
[$world (close-output-port world port2)]
[$world (close-input-port world port1)]}
world)))]
[_ <argv-error>]})))