blob: b004560f5501ae21d684bc6c576351359705d63a (
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
|
# Fn
---
```text
Fn_class `alias Enum[
.unknown; .incomplete; .native
.task; process; .generator; .iterator; .closure;
.bound;
.regex
]
Fn[Fn_class; RETURN_TYPE; Tuple[ARGS]; STATE; List]
```
# 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 or closure
## 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 : 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 : `wait task
```
## \`sync
Synchronous call
If the callee is a process, an inline wait with async is used
```text
fn `sync args // can be turned into `wait fn `async args
```
|