packages feed

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>]})))