In the "where clause" section, shouldn't this be allowed: let a : Any<Collection, SetAlgebraType where Collection.Element == SetAlgebraType.Element> I am asking because the acceptable type equality constraint is stated as: Type equality constraint: X == ConcreteType Jan E.