blob: 5a723f60cab7372dbad9973bf2e6d83b85ea82fd (
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
|
# Fn
---
```text
Fn_class `alias Enum[.unknown; .incomplete; .native; 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
## 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 `call 10
// invoking
@ it {[v] `log v } // 2 4 6 8 10 12 14 16 18 20
// same as above
@ {
# `call it {
.value {[v] `log v }
.done { `break }
}
}
```
# Calling
## \`fork
```text
task : `fork fn
value : `join task
```
## \`call
```text
fn `call args // `join fn `task args
```
|