Hello, while a cool project, I would highly recommend against using it !
As you hinted at, there is a very good reason these things are coupled, it goes as follows:
Assume a library uses experimental feature F to do X
- If your library requires F to implement X, then it must be experimental as well, since X will need to evolve as F evolves !
- If your library can implement X without F, then you refactor it, experimental features are bound to change, and you should not rely on them for your stable library
This was a hard-learned lesson from Scala 2’s macros, which were experimental, but could be used by regular libraries, and so spread over the whole ecosystem.
Since some things were only possible using them, even changing them could require vast amount of code to need to be updated, and removing them entirely was impossible.
AFAIK the most difficult part in translating code from Scala 2 to Scala 3 is the macros.
(If I made any mistake in the above, feel free to correct me)