writeStringToFileAndWrappedSocket(w: WrappedSocket, f:File, s:String) = writeStringToFile(f,s) and writeStringToWrappedSocket(w,s)
If this is written in the library, that is 2^n combinations of file output functions - even worse than the n*m the article complains about.
The author, Kate Wagner, also writes more serious pieces on architecture and housing for The Nation. I recommend taking a look!
https://www.thenation.com/authors/kate-wagner/ (warning: paywall after a few articles)