top | item 36955062

(no title)

hfkwer | 2 years 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.

discuss

order

tialaramex|2 years ago

I 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|2 years ago

What 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.