Yes, that’s a recurrent topic. Julia lacks a formal interface/trait mechanism. It’s quite difficult to implement properly without stumbling into problems. Instead it’s common to use “duck-typing” (if it walks like a duck, and talks like a duck, it is a duck). I.e., just add enough low level methods for the things one wants to work.
For some of the abstract types an interface has been defined in the manual, but not for IO: