« first day (365 days earlier)      last day (1703 days later) » 

08:29
Playing with ideas for using a lazy list for user input...
(def main
  (lambda (stdin)
    (repl stdin)))

(def repl
  (lambda (stdin)
    (let
      ((prompt-result (prompt stdin))
       (line-of-code (head prompt-result))
       (new-stdin (tail prompt-result)))
      (if line-of-code
        (do
          (disp (eval line-of-code))
          (repl new-stdin))
        "Bye!"))))

(def prompt
  (lambda (stdin)
    (do
      (write "> ")
      (read-line stdin nil))))

(def read-line
  (lambda (char-ls accum)
    (let
      ((chr (head char-ls)))
      (if (or (nil? chr) (equal? chr 10))
I think it would work. But there it also leaves somewhat to be desired--passing the input stream everywhere is cumbersome, and I especially don't like having to reverse each line after reading it.

« first day (365 days earlier)      last day (1703 days later) »