Hello Swift community. I'd like to discuss with you if we need something like 
this in Swift 3 or any future Swift version.

As you may know there is no way to constrain a numeric type expect for some 
scope internal assertion or precodintions which may produce a runtime error if 
the input value is out of the defined bound.

func foo(value: Int) {
                
        assert(value > 0 && value <= 10)

        // passed
}

How would it be if Swift would allow us to constraint numeric typs with 
ranges/intervals?

func newFoo(value: Int<1...10>) {
                
        // no need for an assertion any more
}

We could go even further and add more then one range/interval:

func someFoo(value: Int<0...20, 40...60>) { /* do some work */ }

Not only integers should have this ability but also floating point types like 
Double and Float. 

Alternative form might look like this:

Double[1.0...10.0]
Float[0.0...1.0, 10.0...100.0]

One downside of half opened ranges/intervals is the left side of its set. How 
do we exclude the left element?

1...10 means 1..<11 equals [1, 11)

But how can we create something like (0.0, 1.0), do we need a strange looking 
binary operator 0.0>..<1.0?

What do you think? I'd love to hear any feedback to this.

-- 
Adrian Zubarev
Sent with Airmail
_______________________________________________
swift-evolution mailing list
[email protected]
https://lists.swift.org/mailman/listinfo/swift-evolution

Reply via email to