[swift-evolution] Feasibility of "T1 & ¬T2"

Dave DeLong swift at davedelong.com
Wed Nov 29 21:27:33 CST 2017

Hi SE,

I’m pondering some esoteric type stuff as I’m sketching out an improved date/time library (https://github.com/davedelong/Chronology <https://github.com/davedelong/Chronology>), and I’m wondering two things:

1️⃣ Is there a way to express a type that does *not* conform to a protocol? 

For example, let’s say I have three protocols:

protocol YearHaving { var year: Int }
protocol MonthHaving { var month: Int }
protocol DayHaving { var day: Int }
typealias DateHaving = YearHaving & MonthHaving & DayHaving

Now, I want to allow for some adjustments to values that have these types:

extension DayHaving {
    func removingDay() → Self & ¬DayHaving // whatever type “self” is, except it does not conform to “DayHaving”, because you just removed the day value

Is this possible?

2️⃣ If this is not possible, would it be hard to add something like this in?

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.swift.org/pipermail/swift-evolution/attachments/20171129/ec9c547d/attachment.html>

More information about the swift-evolution mailing list