(declare (usual-integrations))

(define (make-line-prefix-port port prefix)
  (make-port line-prefix-port-type
	     (vector port prefix #t)))

(define line-prefix-port-type
  (make-port-type
   `((write-char
      ,(lambda (port char)
	 (let ((v (port/state port)))
	   (let ((port (vector-ref v 0))
		 (prefix (vector-ref v 1)))
	     (if (vector-ref v 2)
		 (write-string prefix port))
	     (write-char char port)
	     (vector-set! v 2 (char=? char #\newline)))))))
   #f))


(define ((pp-line-prefix prefix) object #!optional port . rest)
  (let ((port
	 (make-line-prefix-port
	  (if (default-object? port)
	      (current-output-port)
	      port)
	  prefix)))
    (apply pp (cons object (cons port rest)))))


(define pp-comment (pp-line-prefix ";"))

(set! repl:write-result-hash-numbers? #f)

