Why is it `close(::Channel)` instead of `close!(::Channel)`?

There is no explicit data structure being mutated. Yes, I/O operations change the state of the I/O stream but that’s inherent to the way they function. It could be viewed the other way but then all I/O operations would end in ! which seems unnecessary.