summaryrefslogtreecommitdiff
path: root/docs/type_system/function.md
diff options
context:
space:
mode:
authornodist <kevin.comas.git@gmail.com>2026-06-09 10:32:38 -0400
committernodist <kevin.comas.git@gmail.com>2026-06-09 10:32:38 -0400
commita13b72d789c6e2ee3d94bd1b19aad3dda0aea3c3 (patch)
tree218fe41676c6a103410fc423d7c3b5c9f3da48ca /docs/type_system/function.md
parent4da9de3213a28c7e17945168acdb06308bb41df8 (diff)
inline fn defs
Diffstat (limited to 'docs/type_system/function.md')
-rw-r--r--docs/type_system/function.md118
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
+```