aboutsummaryrefslogtreecommitdiff
path: root/doc/manual/src/language/constructs.md
diff options
context:
space:
mode:
Diffstat (limited to 'doc/manual/src/language/constructs.md')
-rw-r--r--doc/manual/src/language/constructs.md28
1 files changed, 14 insertions, 14 deletions
diff --git a/doc/manual/src/language/constructs.md b/doc/manual/src/language/constructs.md
index a3590f55d..2a527770a 100644
--- a/doc/manual/src/language/constructs.md
+++ b/doc/manual/src/language/constructs.md
@@ -146,65 +146,65 @@ three kinds of patterns:
- If a pattern is a single identifier, then the function matches any
argument. Example:
-
+
```nix
let negate = x: !x;
concat = x: y: x + y;
in if negate true then concat "foo" "bar" else ""
```
-
+
Note that `concat` is a function that takes one argument and returns
a function that takes another argument. This allows partial
parameterisation (i.e., only filling some of the arguments of a
function); e.g.,
-
+
```nix
map (concat "foo") [ "bar" "bla" "abc" ]
```
-
+
evaluates to `[ "foobar" "foobla" "fooabc" ]`.
- A *set pattern* of the form `{ name1, name2, …, nameN }` matches a
set containing the listed attributes, and binds the values of those
attributes to variables in the function body. For example, the
function
-
+
```nix
{ x, y, z }: z + y + x
```
-
+
can only be called with a set containing exactly the attributes `x`,
`y` and `z`. No other attributes are allowed. If you want to allow
additional arguments, you can use an ellipsis (`...`):
-
+
```nix
{ x, y, z, ... }: z + y + x
```
-
+
This works on any set that contains at least the three named
attributes.
-
+
It is possible to provide *default values* for attributes, in
which case they are allowed to be missing. A default value is
specified by writing `name ? e`, where *e* is an arbitrary
expression. For example,
-
+
```nix
{ x, y ? "foo", z ? "bar" }: z + y + x
```
-
+
specifies a function that only requires an attribute named `x`, but
optionally accepts `y` and `z`.
- An `@`-pattern provides a means of referring to the whole value
being matched:
-
+
```nix
args@{ x, y, z, ... }: z + y + x + args.a
```
-
+
but can also be written as:
-
+
```nix
{ x, y, z, ... } @ args: z + y + x + args.a
```