Is there a hack to make the commented piece work?
protocol RecordTypeShape {
associatedtype Name
associatedtype Value
associatedtype Tail: RecordTypeShape
}
enum Comb<Name, Value, Tail> : RecordTypeShape
where Tail: RecordTypeShape {
typealias Tail = Tail
typealias Value = Value
typealias Name = Name
}
enum End: RecordTypeShape {
typealias Tail = Self
typealias Value = Self
typealias Name = ()
}
enum Yes {}
enum No {}
extension RecordTypeShape {
typealias Contains<N> = Yes where Name == N
}
// extension RecordTypeShape {
// typealias Constains<N> = Tail.Contains<N>
// }
extension RecordTypeShape where Self == End {
typealias Contains<N> = No
}
Such that...
enum Name {}
enum Age {}
enum FavouriteColour {}
typealias Ex =
Comb<Name, String,
Comb<Age, Int,
Comb<FavouriteColour, String, End>>>
//Ex.Contains<FavouriteColour> == Yes