Add bilingual manual and localized docs routes
This commit is contained in:
@@ -0,0 +1,41 @@
|
||||
# Functions
|
||||
|
||||
A function is a pure expression that accepts values and returns a value.
|
||||
|
||||
## Syntax
|
||||
|
||||
```dcdl
|
||||
(value: Int) => value + 1
|
||||
```
|
||||
|
||||
Use ordinary call syntax to invoke a function.
|
||||
|
||||
```dcdl
|
||||
let
|
||||
increment = (value: Int) => value + 1;
|
||||
in
|
||||
increment(41)
|
||||
```
|
||||
|
||||
A function can have multiple parameters.
|
||||
|
||||
```dcdl
|
||||
(input_a: { hoge = Int & >= 0; }, input_b: { fuga = Int; }) =>
|
||||
{
|
||||
hoge = input_a.hoge;
|
||||
fuga = input_b.fuga;
|
||||
}
|
||||
```
|
||||
|
||||
A parameter range is optional.
|
||||
When present, the argument is validated and refined using the same rules as `as` when the argument is referenced.
|
||||
|
||||
## Scope and evaluation
|
||||
|
||||
Functions have lexical scope and can reference bindings from where they were defined.
|
||||
Arguments are evaluated lazily, so an argument not referenced by the function body is not evaluated.
|
||||
Recursive field or argument dependencies produce a cycle diagnostic.
|
||||
|
||||
Functions can be referenced and called as intermediate values, but cannot be materialized as data.
|
||||
An unapplied function remaining in a materialization target produces a diagnostic.
|
||||
Function equality is not defined, and composing two function values with `&` produces a conflict.
|
||||
Reference in New Issue
Block a user