"A collection of unique elements. A `Set` is a `Collection` of its elements. Sets may be the subject of the binary union, intersection, and complement operators `|`, `&`, and `~`." shared interface Set<out Element> satisfies Collection<Element> & Cloneable<Set<Element>> given Element satisfies Object { "Determines if this `Set` is a superset of the specified Set, that is, if this `Set` contains all of the elements in the specified `Set`." shared default Boolean superset(Set<Object> set) { for (element in set) { if (!element in this) { return false; } } else { return true; } } "Determines if this `Set` is a subset of the given `Set`, that is, if the given set contains all of the elements in this set." shared default Boolean subset(Set<Object> set) { for (element in this) { if (!element in set) { return false; } } else { return true; } } "Two `Set`s are considered equal if they have the same size and if every element of the first set is also an element of the second set, as determined by `contains()`." shared actual default Boolean equals(Object that) { if (is Set<Object> that, that.size==size) { for (element in this) { if (!element in that) { return false; } } else { return true; } } return false; } shared actual default Integer hash { variable Integer hashCode = 1; for (Element elem in this){ hashCode *= 31; hashCode += elem.hash; } return hashCode; } "Returns a new `Set` containing all the elements of this `Set` and all the elements of the given `Set`." shared formal Set<Element|Other> union<Other>(Set<Other> set) given Other satisfies Object; "Returns a new `Set` containing only the elements that are present in both this `Set` and the given `Set`." shared formal Set<Element&Other> intersection<Other>(Set<Other> set) given Other satisfies Object; "Returns a new `Set` containing only the elements contained in either this `Set` or the given `Set`, but no element contained in both sets." shared formal Set<Element|Other> exclusiveUnion<Other>(Set<Other> set) given Other satisfies Object; "Returns a new `Set` containing all the elements in this `Set` that are not contained in the given `Set`." shared formal Set<Element> complement<Other>(Set<Other> set) given Other satisfies Object; } "A [[Set]] with no elements." shared object emptySet extends Object() satisfies Set<Nothing> { shared actual Set<Other> union<Other>(Set<Other> set) given Other satisfies Object => set; shared actual Set<Nothing> intersection<Other>(Set<Other> set) given Other satisfies Object => emptySet; shared actual Set<Other> exclusiveUnion<Other>(Set<Other> set) given Other satisfies Object => set; shared actual Set<Nothing> complement<Other>(Set<Other> set) given Other satisfies Object => emptySet; shared actual Set<Nothing> clone => emptySet; shared actual Iterator<Nothing> iterator() => emptyIterator; shared actual Boolean subset(Set<Object> set) => true; shared actual Boolean superset(Set<Object> set) => set.empty; shared actual Integer size = 0; shared actual Boolean empty = true; shared actual Boolean contains(Object element) => false; shared actual Boolean containsAny({Object*} elements) => false; shared actual Boolean containsEvery({Object*} elements) => false; shared actual Integer count( Boolean selecting(Nothing element)) => 0; shared actual Set<Nothing> map<Result>( Result collecting(Nothing element)) => emptySet; shared actual Set<Nothing> filter (Boolean selecting(Nothing element)) => emptySet; shared actual Result fold<Result>(Result initial, Result accumulating(Result partial, Nothing element)) => initial; shared actual Null find (Boolean selecting(Nothing element)) => null; shared actual [] collect<Result> (Result collecting(Nothing element)) => []; shared actual [] select (Boolean selecting(Nothing element)) => []; shared actual Boolean any (Boolean selecting(Nothing element)) => false; shared actual Boolean every (Boolean selecting(Nothing element)) => false; shared actual Set<Nothing> skipping(Integer skip) => emptySet; shared actual Set<Nothing> taking(Integer take) => emptySet; shared actual Set<Nothing> by(Integer step) => emptySet; }