Type Syntax Sugar
Even though types such as array, choice, function types, are mapped to Fuzion features, it could improve readability and usability a lot to have special syntax for declaration of these types and their instances.
is
type
|
Feature | Type Declaration | value syntax sugar | comment | |
---|---|---|---|---|---|
verbose | syntax sugar | ||||
sequence, list or array | Sequence |
Sequence<A> |
[T] |
[a,b,c] [] |
A value [a,b,c] is an instance
of array<T> (that can be assigned to
type Sequence<T> ), while type [A] is
equivalent to Sequence<T> . The type of a sequence
value is inferred from the target it is assigned to, or, if the target
does not have a declared type, from the first element in the sequence
([void] for an empty sequence).
|
dictionary, map | Map |
Map<A,B> |
[A => B] |
[a1 => b1,
|
A map value is of type orderedMap , the elements must inherit ordered . |
function or lambda | Function |
Function<R,A,B> Function<R,A> Function<R> |
(A,B) -> R A,B -> R (A) -> R A -> R () -> R
|
(a,b) -> f a b a,b -> f a b (a) -> f a a -> f a () -> f const
|
A lambda value must be assigned to a field of a function type. |
tagged union | choice |
choice<A,B,C> |
A | B | C |
a |
A value a of type A will be converted to a
choice type A | B | C implicitly in an assignment to a field
whose type is the choice type. |
tuple | tuple |
tuple<A,B,C> |
(A, B, C) |
(a, b, c) ()
|
Note that (a) is _not_ a one-tuple. The type
of () is unit , which is a heir
of tulple<> .Tuple syntax is also used for destructuring as in (x, y) := point .
|