blob: d0fabc55d0fbe026724eef13936c12faaa959163 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
|
# Function
---
```text
KIND : UNKNOWN | INCOMPLETE | NATIVE | TASK | PROCESS | GENERATOR | ITERATOR | CLOSURE | BOUND | REGEX
Function[[KIND] STATE; List; RETURN_TYPE; Collection[TYPE.SYMBOL]]
```
# Alias
```text
Fn[Generic.T; Collection[TYPE.SYMBOL]] `alias Function[[KIND]; STATE; List; Generic.T; Collection[TYPE.SYMBOL]]
```
# Inline Definition
```text
([x; y] x + y) // Fn[Any; Any.x; Any.y]
([I64.x; y] x + y) // Fn[Any; I64.x; Any.y]
```
# Function Classes
## Unknown
Placeholder before evaluation
## Incomplete
A function with an incomplete type, type checking occurs at invocation
## Native
Native function wrapper
## Task
A queue-able function in a process or iterator
## Process
A list of tasks with state
## Generator
A function for creating an iterator
## Iterator
A task creator with state, cannot take arguments, can be called until done
## Closure
A task creator with state that can take arguments
## Bound
A function with some arguments already set
## Regex
Regular Expression
# Returning
## \`return
## Transient Union Return Chaining
# Iterating
## \`yield
Yielding wraps the value in the transient union `Next`
Return `Void` to stop iteration
```text
fn : ([n] @ 1 < n {[x] `yield 2 * x; n +: 1 } )
it : fn `sync 10
// invoking
@ it {[v] `log v } // 2 4 6 8 10 12 14 16 18 20
// same as above
@ {
# `sync it {
.value {[v] `log v }
.done { `break }
}
}
```
# Calling
## \`async
Asynchronous call
```text
task : `async fn
value : `await task
```
## \`sync
Synchronous call
If the callee is a process, an inline await with async is used
```text
fn `sync args // can be turned into `await fn `async args
```
|