requires: {#NoDuplicatesCollection}. provides: {#SingleSet}. collections addPrototype: #SingleSet derivedFrom: {NoDuplicatesCollection}. SingleSet addSlot: #element valued: Nil. "SingleSets are collections which are only supposed to contain exactly one elements or be empty." ss@(SingleSet traits) accepts: _@Nil [False]. ss@(SingleSet traits) newEmpty [| newSS | newSS: ss clone. newSS element: Nil. newSS ]. ss@(SingleSet traits) newSize: _ [ ss newEmpty ]. ss@(SingleSet traits) do: block [ block applyWith: ss element ]. ss@(SingleSet traits) reverseDo: block [ block applyWith: ss element ]. ss@(SingleSet traits) isEmpty [ ss element isNil ]. ss@(SingleSet traits) add: obj [ ss element ifNil: [ss element: obj] ]. ss@(SingleSet traits) remove: obj [ ss element = obj ifTrue: [ss element: Nil] ].