I think it’s because of overloading, per that answer: in the intersection case, you know you have an overloaded member f, and you can choose statically between them, but in the union case, you don’t. That seems OK for nilary methods, but what if they take parameters?
Maybe it’s a use case that I want to invoke f reflectively with N args, tell me if there any viable alternative? Is that better than nothing?