diff --git a/docs/manual.typ b/docs/manual.typ index c106038..c434923 100644 --- a/docs/manual.typ +++ b/docs/manual.typ @@ -198,10 +198,26 @@ python3 build/midas/script.py In this chapter, you will find a complete reference for the Midas definition language. A `*.midas` file contains a number of statements, which can be: +- *`alias`* statements (see @alias-stmt): to define a new type alias - *`type`* statements (see @type-stmt): to define a new type - *`extend`* statements (see @extend-stmt): to define member of a type - *`predicate`* statements (see @predicate-stmt): to define named predicates that can be used in constraint types +== Alias Statement + +An *`alias`* statement lets you define a new type alias. It requires a unique name and base type. + +While a `type` statement (see @type-stmt) allows generic definitions, aliases are purely a for givin an alternative name to a type. + +#figure( + ```midas + alias MyType = float + ```, + caption: [Simple `alias` statement declaring a new type "`MyType`" equivalent to `float`], +) + +This statement defines a new type called `MyType` which is equivalent to `float`. `MyType` and `float` can be used interchangeably. + == Type Statement A *`type`* statement lets you define a new type. It requires a unique name and base type. @@ -212,7 +228,7 @@ The simplest form of a *`type`* statement is: type MyType = float ```, caption: [Simple `type` statement declaring a new type "`MyType`" as a subtype of `float`], -) +) This statement defines a new type called `MyType` which is a subtype of `float`. `MyType` is a `float` but a `float` is not necessarily `MyType`. @@ -291,8 +307,7 @@ To better refine a generic type, you can also bound type parameters using the fo caption: [Generic container type definition with a bound], ) -This can be read as "`Container` is a generic type which takes one type parameter `T` that must be a subtype of `float`". - +This can be read as "`Container` is a generic type which takes one type parameter `T` that must be a subtype of `float`".\ You can use a generic type, i.e. instantiate it, by using a similar syntax with concrete type as arguments: #figure( diff --git a/docs/midas.sublime-syntax b/docs/midas.sublime-syntax index dec80f8..baa135f 100644 --- a/docs/midas.sublime-syntax +++ b/docs/midas.sublime-syntax @@ -37,6 +37,9 @@ contexts: pop: true keywords: + - match: \balias\b + scope: keyword.declaration.midas + push: alias-stmt - match: \btype\b scope: keyword.declaration.midas push: type-stmt @@ -47,6 +50,15 @@ contexts: scope: keyword.declaration.midas push: predicate-stmt + alias-stmt: + - match: "{{identifier}}" + scope: entity.name.type + - match: "=" + scope: keyword.operator.equal.midas + push: type-expr + - match: $ + pop: true + type-stmt: - match: "{{identifier}}" scope: entity.name.type