diff options
Diffstat (limited to 'doc/manual/src/expressions/language-constructs.md')
-rw-r--r-- | doc/manual/src/expressions/language-constructs.md | 16 |
1 files changed, 16 insertions, 0 deletions
diff --git a/doc/manual/src/expressions/language-constructs.md b/doc/manual/src/expressions/language-constructs.md index 121e4d998..20d003348 100644 --- a/doc/manual/src/expressions/language-constructs.md +++ b/doc/manual/src/expressions/language-constructs.md @@ -1,5 +1,7 @@ # Language Constructs +## Recursive sets + Recursive sets are just normal sets, but the attributes can refer to each other. For example, @@ -24,6 +26,8 @@ example, does not terminate\[1\]. +## Let-expressions + A let-expression allows you to define local variables for an expression. For instance, @@ -34,6 +38,8 @@ For instance, evaluates to `"foobar"`. +## Inheriting attributes + When defining a set or in a let-expression it is often convenient to copy variables from the surrounding lexical scope (e.g., when you want to propagate attributes). This can be shortened using the `inherit` @@ -95,6 +101,8 @@ is equivalent to when used while defining local variables in a let-expression or while defining a set. +## Functions + Functions have the following form: pattern: body @@ -187,6 +195,8 @@ you can bind them to an attribute, e.g., let concat = { x, y }: x + y; in concat { x = "foo"; y = "bar"; } +## Conditionals + Conditionals look like this: if e1 then e2 else e3 @@ -194,6 +204,8 @@ Conditionals look like this: where e1 is an expression that should evaluate to a Boolean value (`true` or `false`). +## Assertions + Assertions are generally used to check that certain requirements on or between features and dependencies hold. They look like this: @@ -257,6 +269,8 @@ The points of interest are: non-`null` value was passed. This prevents an unnecessary rebuild of Subversion if OpenSSL changes. +## With-expressions + A *with-expression*, with e1; e2 @@ -285,6 +299,8 @@ establishes the same scope as let a = 1; in let a = 2; in let a = 3; in let a = 4; in ... +## Comments + Comments can be single-line, started with a `#` character, or inline/multi-line, enclosed within `/* ... */`. |