sets, maps and lists are now homogeneous.
Lists by extension now require the "list" keyword, like sets and
maps. Semicolons needed, instead of commas.
New syntax for lists: `list [e_1; e_2; ...; e_n]`.
The empty list can now be denoted either by `list []` or `list end` or
`nil'.
Both `list` and `nil` are new keywords. Lists can also be denoted
without brackets, as sets and maps: `list e_1; e_2; ...; e_n end`.
The extension for maps follows the extension for sets: `map [b_1; b_2;
...; b_n]` or `maps b_1; ...; b_n end`.
"map" has become a keyword to introduce definition of maps by extension in declarations ("map" ... "end"). This entails that a grammar rule had to be created to handle the type expressions "map (..., ...)". Concordantly, I added map patches, modelled after record patches.
I created a node in the AST for map expressions (currently only
map look-ups).
I refactored the parser with parametric rules.
and "nothing".
Until now only products of type names were allowed: I extended
them to allow type expressions.
Removed the destructive update of a map binding "a[b] := c".
Record projection has been extended to allow for qualified
names: "a.b.c" and "a.b.c[d]".
Changed the LIGO extension from ".li" to ".ligo".
Fixed the name of the language to be "LIGO" (instead of "Ligo").
and functional update (copy).
The only creative piece of concrete syntax is that of the
expression for functional updates:
copy foo with record field = value end
where "copy", "with", "record" and "end" are keywords.