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

Reply via email to