aboutsummaryrefslogtreecommitdiff
path: root/doc/manual/src/expressions/language-constructs.md
diff options
context:
space:
mode:
authorEelco Dolstra <edolstra@gmail.com>2020-07-23 14:20:54 +0200
committerEelco Dolstra <edolstra@gmail.com>2020-07-23 18:27:20 +0200
commitee051084723333fc5889c604c829669800e8b43c (patch)
tree5e62b01d0f137b451b504dc2ca1a2378711ec338 /doc/manual/src/expressions/language-constructs.md
parent136fd55bb2f7c4f8e93992c6b662d54ce941a73a (diff)
<simplesect> -> <section>
Pandoc silently ignores <simplesect>...
Diffstat (limited to 'doc/manual/src/expressions/language-constructs.md')
-rw-r--r--doc/manual/src/expressions/language-constructs.md16
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 `/*
... */`.