This suspiciously starts to resemble a mixture of dependent types and explicit contracts (something like the Midori variant of C#).
By the way, while we are at it: if the compiler supports this kind of feature, we could (and should) statically check most of the constraints. Accordingly, in your example, f(-3) would be a compiler error (the two pure invariants applied to the constant argument would both trivially constant-fold to false). Sent from my iPhone > On 04 Jan 2016, at 21:33, Howard Lovatt <[email protected]> wrote: > > Alternatively the Properties Behaviour syntax proposal could be applied to > any declaration, assuming that it is accepted. > > >> On 5 Jan 2016, at 4:18 AM, Amir Michail via swift-evolution >> <[email protected]> wrote: >> >> Examples: >> >> invariant vectorIndex(v:Int) { return 0..<3 ~= v } >> >> var i:Int,vectorIndex: = 2 >> i = 3 // run-time error >> >> invariant positive(v:Int) { return v > 0 } >> invariant odd(v:Int) { return v % 2 == 1 } >> >> var x:Int, positive, odd = 5 >> >> x = 2 // run-time error >> >> func f(z:Int, positive, odd) { >> … >> } >> >> f(-3) // run-time error >> >> >> >> >> >> >> _______________________________________________ >> swift-evolution mailing list >> [email protected] >> https://lists.swift.org/mailman/listinfo/swift-evolution > > _______________________________________________ swift-evolution mailing list [email protected] https://lists.swift.org/mailman/listinfo/swift-evolution
