(define-library (scheme file)
  (import (picrin base)
          (scheme base))

  (define (call-with-input-file filename callback)
    (call-with-port (open-input-file filename) callback))

  (define (call-with-output-file filename callback)
    (call-with-port (open-output-file filename) callback))

  (define (with-input-from-file filename thunk)
    (call-with-input-file filename
      (lambda (port)
        (parameterize ((current-input-port port))
          (thunk)))))

  (define (with-output-to-file filename thunk)
    (call-with-output-file filename
      (lambda (port)
        (parameterize ((current-output-port port))
          (thunk)))))

  (export open-input-file
          open-binary-input-file
          open-output-file
          open-binary-output-file
          delete-file
          file-exists?
          call-with-input-file
          call-with-output-file
          with-input-from-file
          with-output-to-file))