Going back to Java, I'd have this in mind:
Faraday.withDefaultAdapter().addMiddleware(...)
or, perhaps even better, adding any other sensible defaults:
Faraday.withSensibleDefaultStack().addMiddleware(...)
I'd rather couple myself to Faraday by *intent* ("I want the default stack"), than by implementation details (knowing what the "default stack" includes and how to instantiate the pieces and in which order to apply them). If, later, I need those details, then I simply inline `withSensibleDefaultStack()` and I can see how it's done.
I love Misko's article. Warning people about singletons started my career. http://www.ibm.com/develope... I don't want a singleton: I want Faraday to hide some implementation details from me without making it impossible for me to gain access to them when, later, I need them. I think my proposal achieves that.