Basic Types in MxL
The type-system of MxL consists of the following types:
Name | Super type | Description and Notes |
---|---|---|
Object | - | Each element of the data model is of type Object |
String | Object | Each character sequence encapsulated in quotation marks is a value of type, e.g. "hello world" |
Number | Object | Represents both integers and decimals, e.g. 123.456 |
Boolean | Object | true and false |
Date | Object | A date consisting of day, month, and year. Can be constructed by the date-function and the date’s string representation. The current date can be determined by the global identifier Today . The components of a date are accessible via day (e.g. Today.day ), month (e.g. Today.month ), and year (e.g. Today.year ). |
Map | Object | A dynamic collection of key-value-pairs. The constructor is written as [k1: v1, k2: v2, ...] (e.g., ["a": 1, "b": 2] ) while single elements of the map can be accessed via the respective element’s key and the [] operator, e.g. any-map["a"] .This type can be parameterized to determine its key and value types, e.g., the type Map<String, Number> describes a map with String keys and Number values. |
Structure | Object | A complex object having an arbitrary number of attributes. The constuctor notation is similar to the JavaScript Object Notation (JSON), e.g. {number: 1, title: "hello world"} . The expression {any-identifier} is a short-cut for {any-identifier: any-identifier} .The Sequence-type can be parameterized to determine its inner structure, e.g., the type Structure<name:String, x:Number> describes a complex object which has an attribute name of type String as well as an attribute x of type Number. |
Entity | Structure | The type entity is the base type for all user-defined entity types (e.g., Project, Customer, etc.) An entity is represented as a complex object, i.e. an object with attributes and/or references to other objects. |
Sequence | Object | A sequence of values, written as [element1, element2, ...] . In contrast to the mathematical term “set”, in sequences order matters and duplicates are allowed.The Sequence-type can be parameterized to determine the type of the sequence’s element, e.g. the type Sequence<Number> defines a sequence of numbers. The elements of a sequence are accessible via [ ] and the element’s index, whereas the index is zero-based. |
Function | Object | Because the language allows higher-order functions, there are objects of type Function. Anonymous functions can be written as (param1, param2, ...) => any expression .This type can be parameterized to determine the function’s signature (parameter types and return type), e.g. the type Function<Number,Number,Boolean> defines a function having two parameters of type Number and returning an object of type Boolean. Moreover, parameter types can be defined as optional by a question mark (the function can be invoked without optional parameters), e.g. Function<Number, Number?, Boolean> can be invoked for either one or two parameters. |
Type | Object | A meta-type objects representing types. |
The following picture shows an overview of all basic types of MxL in form of an UML class diagram: