If you haven’t looked at the changes in Scala 3, you might want to do so. They are largely intended to address the types of things that you mentioned here. For example, implicits have been completely revamped. They have also added a number of other nice features like union types and intersection types. The union types allow them to add null safety, which is one of the features I’m most excited about. For 3.0.0 it is still under a flag, but if you specify -Yexplicit-nulls and -Ysafe-init, you should never have an NPE again. They have also added flow typing to simplify writing code that is null-safe.