It would be very convenient to be able to pass a constructor as a function argument easily.
For example, Swift can do it. A constructor can always be turned into a function with Typename.self shortcut.
A syntax like new Typename _ may be used for disambiguation when it’s required but just new Typename should work fine in most of the cases because it’s possible to infer semantic (instantiation or addressing constructor as a function) from the context.
Maybe I misunderstand something but seems like this P/R does not allow to use non-case class constructors where functions are expected - there is a negative testcase even.
This unfortunately doesn’t work for higher arities – imagine writing a new MyServiceImpl(_, _, _, _, _, _, _, _, _, _) for a hypothetical MyServiceImpl with 10 arguments. Also whenever the arity of the constructor changes this invocation will have to be updated.
Pair could be a case class, but making a hypothetical MyServiceImpl that’s a service class not a data class, a case class just to get an .apply would be an abuse of case classes.