Point, but only because isatty() is a predicate.
> I think we should generalize EBADF to attempts to do something
> fd-ish on a port without a fd. So we raise on EBADF, but otherwise
> return #t or #f depending on the result of isatty().
> I agree this should raise an error [...] if it's a port that
> intrinsically doesn't have an fd associated with it (e.g. your earlier
> example, a string port).
Wait, I don't necessarily agree with myself anymore :D In what way is
(tty? some-string-port) => #f problematic? Consider that the port may
come from an argument to a procedure, in which that procedure doesn't
know what kind of port is passed to it.