(define (read-line . o) (let ((port (if (pair? o) (car o) (current-input-port)))) (let lp ((res '())) (let ((c (read-char port))) (cond [(and (eof-object? c) (null? res)) #f] [(or (eof-object? c) (eqv? c #\newline)) (list->string (reverse res))] [else (lp (cons c res))])))))