I’m indeed not sure about that.
As @jducoeur mentioned already in one of the first replies, it depends on how you define “usage”.
I think just importing something has no effect as such on this feature. But you don’t import stuff just for fun of course. You use this stuff than somehow. I think whether the code part where you imported something becomes “advanced” (or “standard” in case of “basic mode”) depends on what language features you actually use in your code than.
That’s why I’ve said that almost every (serious) codebase will have “advanced” dependencies. If this would make all your depended code automatically also “advanced” the whole idea would be moot in the first place.
That’s a bit too “viral”…
But yes, this needs some fleshing out. I’ve heard here are some smart people around… So details can be worked out. What’s the first step is to sell the basic idea.
I just didn’t expect that we move so fast into “implementation details”. I thought it would take some more time to convince people about the basic principle, as quite some people see some mechanism which is somehow similar to “language imports” very skeptical; imho rightly so, as “language imports” just don’t work! But my proposal is exactly for this reason different in some key parts.
That’s actually true.
I also don’t think that “naked IO” is complex as such. (If you would hard-code stuff to IO
and leave out the than unnecessary type-parameter everywhere in “IO code” this would result actually in quite simple and straight forward APIs. But doing such a hard-coding is against the ideology there, so this won’t happen I guess, even it would make the whole Cats framework quite approachable even for average people. But imagine that it would become a selling point of a lib to be “standard” or “basic” Scala. Maybe someone would build than for that reason a kind of “overlay” lib on top of Cats, just hardcoded to IO
, and start “selling” this lib with the “basic” Scala tag. Such a well visible tag in the ecosystem could become a kind of “sales argument”! And it could motivate initiative for some libs for such a move like described).
Also I’ve mentioned already that “defining ‘advanced’” is quite a task on its own!
We have mostly only anecdotes about what “advanced” Scala is… But we should imho go to the real source: Learners and instructors. Gather some proper data form there, and not define “advanced” ad hoc out of the gut feeling of some.