aboutsummaryrefslogtreecommitdiff
path: root/spec/types.md
diff options
context:
space:
mode:
authorMarshall Lochbaum <mwlochbaum@gmail.com>2021-09-12 20:15:58 -0400
committerMarshall Lochbaum <mwlochbaum@gmail.com>2021-09-12 20:15:58 -0400
commit95cc441b4aefd08d562cf0ee1110db25ba7afdb0 (patch)
tree4d5a4823398955db7d3600761f0caa090ecf37d6 /spec/types.md
parentff1c5b1d1489ed89a789c6b461201ecfd6e9511d (diff)
Allow system values to create new BQN types even in a non-extended implementation
Diffstat (limited to 'spec/types.md')
-rw-r--r--spec/types.md4
1 files changed, 3 insertions, 1 deletions
diff --git a/spec/types.md b/spec/types.md
index 4549fd04..dc596563 100644
--- a/spec/types.md
+++ b/spec/types.md
@@ -11,7 +11,9 @@ BQN programs manipulate data of seven types:
- 2-Modifier
- Namespace
-Of these, the first three are considered *data types* and the next three *operation types*. We first describe the operation types and the namespace; the remainder of this page will be dedicated to the data types. A member of any operation type accepts some number of *inputs* and either returns a *result* or causes an error; inputs and the result are values of any type. When a function is given inputs (*called*), it may produce side effects before returning, such as manipulating variables and calling other functions within its scope, or performing I/O.
+Beyond these, an implementation may define [system values](system.md) that create values of other types. The behavior of such values is not specified and is left up to the implementation.
+
+Of the types specified, the first three are considered *data types* and the next three *operation types*. We first describe the operation types and the namespace; the remainder of this page will be dedicated to the data types. A member of any operation type accepts some number of *inputs* and either returns a *result* or causes an error; inputs and the result are values of any type. When a function is given inputs (*called*), it may produce side effects before returning, such as manipulating variables and calling other functions within its scope, or performing I/O.
- A *function* takes one (monadic call) or two (dyadic call) *arguments*.
- A *1-modifier* takes one *operand*.
- A *2-modifier* takes two *operands*.