diff options
Diffstat (limited to 'docs/type_system/function.md')
| -rw-r--r-- | docs/type_system/function.md | 118 |
1 files changed, 118 insertions, 0 deletions
diff --git a/docs/type_system/function.md b/docs/type_system/function.md new file mode 100644 index 0000000..ebd14ea --- /dev/null +++ b/docs/type_system/function.md @@ -0,0 +1,118 @@ +# Function + +--- + +```text +Function_class `alias Enum[ + .unknown; .incomplete; .native + .task; process; .generator; .iterator; .closure; + .bound; + .regex +] + +Function[Function_class; RETURN_TYPE; Collection[TYPE.SYMBOL]; STATE; List] +``` + +# Alias + +```text +Fn[Generic.T; Collection[TYPE.SYMBOL]] `alias Function[Any; Generic.T; Collection[TYPE.SYMBOL]; STATE; List] +``` + +# 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 +``` |
