On Mon, 19 Feb 2018 02:14:26 +0000, bartc wrote: > On 19/02/2018 00:09, Steven D'Aprano wrote: > >> Sure, but only the most boring, uninteresting kinds of types can be so >> named. The point is that "sufficiently fine-grained types" can be >> arbitrarily complex. > > I don't think so.
That's nice. Do you have any reasons for your position? >> If a human finds it hard to give it a meaningful >> name, no algorithm will do it either. Consider: >> >> "positive odd integers greater than 10 but less than 15003 divisible by >> 17 except for 850, 867 and 1394; or primes that aren't Mersenne >> primes". > > Is that a type? Or a function? Or a set? Or a constraint? It *could* be a type, if your type system was sufficiently flexible to allow you to specify something in that level of detail. Of course no existing type system is. Which is of course my point: why static typing zealots do like to make grandiose claims about "sufficiently fine-grained types", the reality is that no type system is, or can be, sufficiently fine-grained to avoid all runtime validation. > How would even a type for the odd numbers from 1 to 10 inclusive work? That's an easy one: even Pascal in the 1970s could deal with enumerated types like the values 1, 3, 5, 7, 9. (I think.) So that's something that a type checker could easily verify at compile time. Given: declare x, y : OddIntBetweenOneAndTen; then: x := 3 would be allowed, but: y := x + 2 probably would be rejected, because the compiler may not be able to tell whether or not x + 2 is still an OddIntBetweenOneAndTen (unless it is actually tracking the value of x, which type checkers don't normally do). Of course this put *severe* limitations on what you can do with such highly restrictive types, which is also part of my point. > (That, a type consisting of one of the values in {1,3,5,7,9}.) Would > they be ordered or unordered? Can I do arithmetic with them: will 3*3 > work, but not 3*5? Operations on types do not necessarily have to return their same type. There's nothing wrong with saying that Odd plus Odd returns Even. -- Steve -- https://mail.python.org/mailman/listinfo/python-list