No disjunctions in type constraints: why?

From <https://github.com/apple/swift-evolution/blob/master/commonly_proposed.md#miscellaneous>.

Maybe I’m not up on my Type Theory, but why should type constraint disjunctions be banned?

···


Daryle Walker
Mac, Internet, and Video Game Junkie
darylew AT mac DOT com

The “Swifty” way of doing such a thing is to have the types you care about conform to a protocol that clearly defines the API you’re trying to expose. For example:

protocol Fooable {
  func doFoo()
}

extension Int: Fooable {
  func doFoo() {
    print("I’m an Int")
  }
}

extension String: Fooable {
  func doFoo() {
    print("I’m a String")
  }
}

Now, instead of a disjunctive Int | String union type you can just use Fooable and call doFoo on it when necessary:

func doSomethingWithAFooable(_ foo: Fooable) {
  foo.doFoo()
}

doSomethingWithAFooable(0) // prints: I’m an Int
doSomethingWithAFooable("") // prints: I’m a String

Saagar Jha

···

On Jan 13, 2018, at 01:45, Daryle Walker via swift-evolution <swift-evolution@swift.org> wrote:

From <https://github.com/apple/swift-evolution/blob/master/commonly_proposed.md#miscellaneous>.

Maybe I’m not up on my Type Theory, but why should type constraint disjunctions be banned?


Daryle Walker
Mac, Internet, and Video Game Junkie
darylew AT mac DOT com

_______________________________________________
swift-evolution mailing list
swift-evolution@swift.org
https://lists.swift.org/mailman/listinfo/swift-evolution

1 Like

If you replace “conjunction” by “O(n) search with early-exit on failure” and “disjunction” by just “O(n) search”, you’ll see why this can lead to computationally painful systems of constraints. Each disjunctive constraint may further contain or create disjunctions ad nauseum, each time incrementing the exponent in the worst-case time it takes to solve the system. Introduction of disjunction into an already complex system (say, one that supports constrained parametric polymorphism and subtyping AND disjunctions through overloads) makes an already difficult problem even harder.

~Robert Widmann

2018/01/13 4:45、Daryle Walker via swift-evolution <swift-evolution@swift.org>のメール:

···

From <https://github.com/apple/swift-evolution/blob/master/commonly_proposed.md#miscellaneous>.

Maybe I’m not up on my Type Theory, but why should type constraint disjunctions be banned?


Daryle Walker
Mac, Internet, and Video Game Junkie
darylew AT mac DOT com

_______________________________________________
swift-evolution mailing list
swift-evolution@swift.org
https://lists.swift.org/mailman/listinfo/swift-evolution