4 ms·
I'm not sure I understand the criticism. You have three functions of type (int, int) -> bool. Where the type system accepts one, it accepts the others. I fail t
by hfkwer 3y ago
I'm not sure I understand the criticism. You have three functions of type (int, int) -> bool. Where the type system accepts one, it accepts the others. I fail to see the issue here? How is the type system supposed to distinguish them? It's up to you, the developer, to do it. If you have two ints x and y, and you mess up and pass y to a function where you wanted to write x, the compiler is never going to catch it for you either.
- tialaramex 3y agoI have three different functions, and what you wrote is not their type, that's their signature. Actually they are really only two different functions - a < b and b > a are the same thing for this integer type - but whether or not the optimiser knows that will not always be obvious. Yes, the C++ type system doesn't express this, that's the defect (well, it's the consequence here of a larger defect). Once they have different types there are two different interesting things we can do, we could just coerce them into a function pointer type based on the signature which is what you've seen in C++ and seem to assume is just naturally the only possibility. Or, we can use parametric polymorphism.
- hfkwer 3y agoWhat do you mean by the "type" of a function? It doesn't sound like you're using any kind of standard definition for the word.
- tialaramex 3y agoA type. The same thing C++ does for a lambda, since you seem to understand C++ better.