Types

Here is a list of the built-in immutable types:

Number

A number wrapper to support serialisation of -0, NaN and ±Infinity (rarely needed).

Examples:

new M.Number(0)
M.Number.of(5)
M.Number.of(NaN)
M.Number.of(-Infinity)

Date

Much like a JavaScript date, but immutable.

Examples:

new M.Date()
new M.Date(new Date(1978, 11, 6))
M.Date.of()
M.Date.of(new Date(1978, 11, 6))

Enum

Simple enumerated values with optional associated data.

Examples:

new M.Enum(['SUN', 'MOON'])
new M.Enum({'SUN': {radius: 695700}, 'MOON': {radius: 1737.1}})
M.Enum.fromArray(['SUN', 'MOON'])
M.Enum.fromObject({'SUN': {radius: 695700}, 'MOON': {radius: 1737.1}})

Map

Ordered map with arbitrary keys and values.

Examples:

new M.Map(new Map([[1, 'a'], [2, 'b']]))
M.Map.fromMap(new Map([[1, 'a'], [2, 'b']]))
M.Map.fromArray([[1, 'a'], [2, 'b']])
M.Map.fromObject({1: 'a', 2: 'b'}) // 1 and 2 are strings in this case
M.Map.of(1, 'a', 2, 'b')

EnumMap

Ordered map with enum keys and arbitrary values.

Examples:

const SolarSystem = M.Enum.fromArray(['SUN', 'MOON'])
const SUN = SolarSystem.SUN()
const MOON = SolarSystem.MOON()

new M.EnumMap(new Map([[SUN, 1], [MOON, 2]]))
M.EnumMap.fromMap(new Map([[SUN, 1], [MOON, 2]]))
M.EnumMap.fromArray([[SUN, 1], [MOON, 2]])
M.EnumMap.of(SUN, 1, MOON, 2)

StringMap

Ordered map with string keys and arbitrary values.

Examples:

new M.StringMap(new Map([['a', 1], ['b', 2]]))
M.StringMap.fromMap(new Map([['a', 1], ['b', 2]]))
M.StringMap.fromArray([['a', 1], ['b', 2]])
M.StringMap.fromObject({a: 1, b: 2})
M.StringMap.of('a', 1, 'b', 2)

List

Ordered indexed collection, implemented with plain arrays, but immutable.

Examples:

new M.List([1, 5, 3, 5])
M.List.fromArray([1, 5, 3, 5])
M.List.of(1, 5, 3, 5)

Set

Ordered collection with no repeated values.

new M.Set([1, 5, 3])
M.Set.fromArray([1, 5, 3])
M.Set.of(1, 5, 3)

Maybe

It helps with optional/nullable fields. See Optional / null values: Maybes for more details.

M.Nothing.isEmpty()         // => true
new M.Maybe(null).isEmpty() // => true
M.Maybe.of(null).isEmpty()  // => true

new M.Just(2).isEmpty()   // => false
M.Just.of(2).isEmpty()    // => false
M.Maybe.of(2).isEmpty()   // => false
M.Just.of(null).isEmpty() // => false (can wrap anything)

M.Just.of(2).map(x => 2 * x)        // => M.Just.of(4)
M.Nothing.map(x => 2 * x).isEmpty() // => true

Last updated