MPS 2023.3 Help

Collections language

An extension to the Base Language that adds support for collections.


Collection language provides a set of abstractions that enable the use of a few most commonly used containers, as well as a set of powerful tools to construct queries. The fundamental type provided by the collections is sequence, which is an abstraction analogous to Iterable in Java, or IEnumerable in .NET . The containers include list (both array-based and linked list), set and map. The collections language also provides the means to build expressive queries using closures, in a way similar to what LINQ does.

Null handling

Collections language has a set of relaxed rules regarding null elements and null sequences.

Null sequence is still a sequence

Null is a perfectly accepted value that can be assigned to a sequence variable. This results simply in an empty sequence.

sequence<Type> nullSeq = null;

Null is returned instead of exception throwing

Whereas the standard collections framework throws an exception as a result of calling a method that cannot successfully complete, the collection language's sequence and its subtypes return null value. For example, invoking first operation on an empty sequence will yield a null value instead of throwing an exception.

sequence<Type> nullSeq = null; Type nullValue = nullSeq.first;

Skip and stop statements


Applicable within a selectMany or forEach closure. The effect of the skip statement is that the processing of the current input element stops, and the next element (if available) is immediately selected.


Applicable within a selectMany closure or a sequence initializer closure. The stop statement causes the construction of the output sequence to end immediately, ignoring all the remaining elements in the input sequence (if any).

Last modified: 07 March 2024