Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
43 commits
Select commit Hold shift + click to select a range
f3b52b7
spec: define nominal tagged unions
julia-script Aug 28, 2026
a88e149
feat(compiler): parse nominal union syntax
julia-script Aug 28, 2026
6ba66fa
feat(compiler): index nominal union declarations
julia-script Aug 28, 2026
5258218
feat(compiler): publish nominal union surfaces
julia-script Aug 28, 2026
22b06b3
feat(compiler): elaborate nominal union constructors
julia-script Aug 28, 2026
fa4a734
feat(compiler): plan nominal union layouts
julia-script Aug 28, 2026
d12fffe
feat(compiler): lower nominal union construction
julia-script Aug 28, 2026
df95dda
feat(compiler): match nominal union variants
julia-script Aug 28, 2026
a85cb36
feat(compiler): clean active nominal union payloads
julia-script Aug 28, 2026
ec858fd
feat(compiler): support nominal union conformances
julia-script Aug 28, 2026
da7468c
feat: make checked outcomes carrier-neutral
julia-script Aug 28, 2026
9372892
test: migrate option and result fixtures
julia-script Aug 28, 2026
1d4fcdc
feat: make effect result carrier-neutral
julia-script Aug 28, 2026
29ec905
feat: remove optional OS count carriers
julia-script Aug 28, 2026
3ec073a
spec: compose Effect.result from general effects
julia-script Aug 28, 2026
4628fd9
Implement Effect result through source composition
julia-script Aug 28, 2026
43e3671
Remove privileged Effect result lowering
julia-script Aug 28, 2026
2a3eb5f
Make recoverable host operations carrier neutral
julia-script Aug 28, 2026
4637c5a
feat(compiler): complete nominal union surfaces
julia-script Aug 28, 2026
665139b
docs(stdlib): refresh nominal result examples
julia-script Aug 28, 2026
3d6d7b5
feat(docgen): link nominal union variants
julia-script Aug 28, 2026
14e1785
fix(compiler): validate relay and union ownership precisely
julia-script Aug 28, 2026
9917dba
fix(compiler): align inline catch suspension control
julia-script Aug 28, 2026
a59b9da
fix(compiler): migrate union-sensitive fixtures
julia-script Aug 28, 2026
a9a0eb4
fix(compiler): preserve catch results across suspension
julia-script Aug 28, 2026
c682c77
fix(compiler): plan erased catch specializations
julia-script Aug 28, 2026
d6555de
fix(compiler): verify nominal union fallbacks
julia-script Aug 28, 2026
0d09631
test(compiler): allow scheduler contention
julia-script Aug 28, 2026
31a7e05
merge: reconcile nominal unions with main
julia-script Aug 28, 2026
e0269dc
fix(compiler): preserve nominal union actor parity
julia-script Aug 29, 2026
786f4bc
fix(compiler): preserve union ownership semantics
julia-script Aug 29, 2026
4df75c6
fix(compiler): clean whole nominal match values
julia-script Aug 29, 2026
27a1832
test(compiler): refresh logging MIR spans
julia-script Aug 29, 2026
731b1fd
fix(vscode): highlight nominal union declarations
julia-script Aug 29, 2026
962c290
test: validate nominal unions in release artifacts
julia-script Aug 29, 2026
5bb8613
test(stdlib): execute alternate result success
julia-script Aug 29, 2026
8464d10
fix(compiler): close nominal union review gaps
julia-script Aug 29, 2026
eb83ad4
fix(lsp): surface union auto imports
julia-script Aug 29, 2026
8a4fd67
fix(wasm): materialize nominal union cleanup
julia-script Aug 29, 2026
d97a7c3
fix(wasm): retain zero-sized address frames
julia-script Aug 29, 2026
ca0a264
refactor(layout): derive union materialization
julia-script Aug 29, 2026
e1446e5
fix(wasm): plan synthetic cleanup frames
julia-script Aug 29, 2026
b7db9a3
fix(wasm): close execution cleanup gaps
julia-script Aug 29, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 2 additions & 1 deletion apps/docs/content/language/alpha-status.md
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,8 @@ The implemented language includes:

- modules, imports, visibility, globals, and typed constants;
- integers, floating-point values, booleans, characters, and string and byte data;
- structs, scalar enums, fixed arrays, runtime slices, structural unions, and exhaustive matching;
- structs, scalar enums, nominal unions, fixed arrays, runtime slices, structural unions, and
exhaustive matching;
- functions, first-class callables, pipelines, generics, interfaces, and specialization;
- mutable places, affine ownership, shared and exclusive borrowing, explicit moves, and
deterministic `Drop` on structured exits;
Expand Down
12 changes: 9 additions & 3 deletions apps/docs/content/language/diagnostics.md
Original file line number Diff line number Diff line change
Expand Up @@ -16,11 +16,11 @@ $ pnpm --filter @silklang/compiler documentation:generate
| `LEX` | Lexical | 7 |
| `PAR` | Parser | 4 |
| `MOD` | Module | 3 |
| `SEM` | Semantic | 155 |
| `SEM` | Semantic | 161 |
| `OWN` | Ownership | 16 |
| `LAY` | Layout | 1 |

There are 186 codes in total.
There are 192 codes in total.

## Lexical (`LEX`)

Expand Down Expand Up @@ -73,7 +73,7 @@ There are 186 codes in total.
| `SEM0017` | | `Duplicate field name <spelling>` |
| `SEM0018` | | `Expected a type, found <spelling>` |
| `SEM0019` | | `Public declaration exposes private type <type>` |
| `SEM0020` | | `Inline recursive struct layout: <join>` |
| `SEM0020` | | `Inline recursive aggregate layout: <join>` |
| `SEM0021` | | `Cannot construct <type> because its raw constructor is not available at this site` |
| `SEM0022` | | `<type> has no field <field>` |
| `SEM0023` | | `Field <field> is initialized more than once` |
Expand Down Expand Up @@ -210,6 +210,12 @@ There are 186 codes in total.
| `SEM0161` | Stable code for a scalar enum pattern naming a member of another enum. | `Enum pattern from <actual> cannot match <expected>` |
| `SEM0162` | Stable code for an integer literal pattern used against a scalar enum. | `Integer pattern <value> cannot match enum <enum>` |
| `SEM0163` | Stable code for effect-block return sites whose success types disagree. | `Effect block return sites have incompatible types: <join>` |
| `SEM0164` | Stable code for a nominal union declaration with no variants. | `Union <unionName> must declare at least one variant` |
| `SEM0165` | Stable code for a repeated variant name within one nominal union. | `Duplicate union variant <spelling>` |
| `SEM0166` | Stable code for a named-field variant whose braces contain no field. | `Union variant <variantName> must omit braces or declare at least one field` |
| `SEM0167` | Stable code for a variant selector absent from its resolved nominal union. | `Union <unionName> has no variant <variantName>` |
| `SEM0168` | Stable code for a variant qualifier that does not name a nominal union. | `Expected a nominal union, found <actual>` |
| `SEM0169` | Stable code for construction through an incomplete nominal union declaration. | `Cannot construct invalid nominal union <unionName>` |

## Ownership (`OWN`)

Expand Down
2 changes: 1 addition & 1 deletion apps/docs/content/language/stdlib/char.md
Original file line number Diff line number Diff line change
Expand Up @@ -55,7 +55,7 @@ Public declarations: 8.
## `fromU32`

```silk
pub fn fromU32(value: u32) -> Option<char>
pub fn fromU32(value: u32) -> silk/option.Option<char>
```

Converts an integer to a Unicode scalar. Returns `None` for `0xD800` through `0xDFFF` and values
Expand Down
10 changes: 5 additions & 5 deletions apps/docs/content/language/stdlib/child-process.md
Original file line number Diff line number Diff line change
Expand Up @@ -67,8 +67,8 @@ effect fn program() -> i32
|> Effect.provideMut<Process.ChildProcess>(&mut provider)
|> Effect.provideMut<Allocator>(&mut allocator)
return match move Process.exitCode(&outcome) {
Option.Some<i32> {value} => 35 + value
Option.None {} => 1
Option.Option<i32>.Some {value} => 35 + value
Option.Option<i32>.None => 1
}
}

Expand Down Expand Up @@ -297,7 +297,7 @@ Creates a process failure with a provider-defined numeric code for diagnostics.
## `providerCode`

```silk
pub fn providerCode(error: &silk/child_process.ProcessError) -> Option<i32>
pub fn providerCode(error: &silk/child_process.ProcessError) -> silk/option.Option<i32>
```

Returns the provider-defined numeric code, or `None` when the failure has no such code.
Expand Down Expand Up @@ -629,7 +629,7 @@ Reports whether a signal terminated the child instead of an exit code.
## `exitCode`

```silk
pub fn exitCode(outcome: &silk/child_process.ProcessOutcome) -> Option<i32>
pub fn exitCode(outcome: &silk/child_process.ProcessOutcome) -> silk/option.Option<i32>
```

Returns the exit code, or `None` when a signal terminated the child.
Expand All @@ -639,7 +639,7 @@ Returns the exit code, or `None` when a signal terminated the child.
## `terminatingSignal`

```silk
pub fn terminatingSignal(outcome: &silk/child_process.ProcessOutcome) -> Option<i32>
pub fn terminatingSignal(outcome: &silk/child_process.ProcessOutcome) -> silk/option.Option<i32>
```

Returns the terminating signal number, or `None` when the child returned an exit code.
Expand Down
14 changes: 6 additions & 8 deletions apps/docs/content/language/stdlib/effect.md
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@ owned provider bindings have distinct borrowing and capture behavior.

## Gotchas

Typed failures are outcomes that combinators can reify and recover. Traps are not: they bypass
Typed failures are outcomes that combinators can materialize and recover. Traps are not: they bypass
[`catchAll`](#declaration-73696c6b2f6566666563743a3a6361746368416c6c), [`ensuring`](#declaration-73696c6b2f6566666563743a3a656e737572696e67), and Drop hooks. [`suspend`](#declaration-73696c6b2f6566666563743a3a73757370656e64) crosses the stack-safe execution boundary
while preserving all three channels exactly; frame exhaustion is fatal.

Expand Down Expand Up @@ -240,8 +240,8 @@ Executes `protected` once and converts its success or typed failure into ordinar

### Details

The returned Effect still requires `R`, because reification does not provide services. Its typed
failure row is empty: an `E` becomes [`Failure`](./result.md#declaration-73696c6b2f726573756c743a3a4661696c757265) data instead of propagating. Traps are not typed
The returned Effect still requires `R`, because conversion does not provide services. Its typed
failure row is empty: an `E` becomes [`Failure`](./result.md#declaration-73696c6b2f726573756c743a3a526573756c743a3a76617269616e743a31) data instead of propagating. Traps are not typed
failures and therefore are not captured.

### Examples
Expand All @@ -265,10 +265,8 @@ effect fn load() -> i32
pub fn main() -> i32 {
let completed = run Effect.result(load())
return match move completed {
Result.Result<i32, Problem> {value: outcome} => match move outcome {
Result.Success<i32> {value} => value
Result.Failure<Problem> {error} => error.answer
}
Result.Result<i32, Problem>.Success {value} => value
Result.Result<i32, Problem>.Failure {error} => error.answer
}
}
```
Expand Down Expand Up @@ -518,7 +516,7 @@ Runs a finalizer after the Effect completes, whatever its outcome, and preserves

### Details

The protected Effect is reified into Result data before the finalizer runs, which is what fixes
The protected Effect is converted into Result data before the finalizer runs, which is what fixes
the order: a typed failure reaches this body as data rather than as a propagation, so the
protected Effect's own frame — and every local it cleans up — is already gone by the time the
finalizer starts. The finalizer therefore exits last, in reverse acquisition order against the
Expand Down
6 changes: 3 additions & 3 deletions apps/docs/content/language/stdlib/filesystem.md
Original file line number Diff line number Diff line change
Expand Up @@ -534,7 +534,7 @@ the fields callers should use for recovery.
## `providerCode`

```silk
pub fn providerCode(error: &silk/filesystem.FileError) -> Option<i32>
pub fn providerCode(error: &silk/filesystem.FileError) -> silk/option.Option<i32>
```

Borrows an error and returns its provider-specific numeric detail, if one was retained.
Expand Down Expand Up @@ -688,10 +688,10 @@ fails with the `InvalidPath` reason. Resolution is lexical and never accesses th
## `parent`

```silk
pub effect fn parent(self: &silk/filesystem.Path) -> Option<silk/filesystem.Path> ! OutOfMemoryError ? &mut Allocator
pub effect fn parent(self: &silk/filesystem.Path) -> silk/option.Option<silk/filesystem.Path> ! OutOfMemoryError ? &mut Allocator
```

Allocates an independently owned parent path, or [`None`](./option.md#declaration-73696c6b2f6f7074696f6e3a3a4e6f6e65) when `self` is root.
Allocates an independently owned parent path, or [`None`](./option.md#declaration-73696c6b2f6f7074696f6e3a3a4f7074696f6e3a3a76617269616e743a30) when `self` is root.

### Details

Expand Down
8 changes: 4 additions & 4 deletions apps/docs/content/language/stdlib/hash-map.md
Original file line number Diff line number Diff line change
Expand Up @@ -186,7 +186,7 @@ impl Drop for silk/hash_map.HashMap<K, V>
## `insert`

```silk
pub effect fn insert<K, V>(self: &mut silk/hash_map.HashMap<K, V>, key: K, value: V) -> Option<V> ! OutOfMemoryError ? &mut Allocator
pub effect fn insert<K, V>(self: &mut silk/hash_map.HashMap<K, V>, key: K, value: V) -> silk/option.Option<V> ! OutOfMemoryError ? &mut Allocator
```

Inserts one owned key and value, answering with the value an equivalent key already held.
Expand Down Expand Up @@ -218,7 +218,7 @@ This function consumes the probe key. It does not change the map or move a store
## `indexOf`

```silk
pub fn indexOf<K, V>(self: &silk/hash_map.HashMap<K, V>, key: K) -> Option<usize>
pub fn indexOf<K, V>(self: &silk/hash_map.HashMap<K, V>, key: K) -> silk/option.Option<usize>
```

Returns the bucket holding an entry under a key equivalent to one probe key, or an absent value.
Expand All @@ -234,7 +234,7 @@ This function consumes the probe key.
## `get`

```silk
pub fn get<K, V>(self: &silk/hash_map.HashMap<K, V>, key: K) -> Option<V>
pub fn get<K, V>(self: &silk/hash_map.HashMap<K, V>, key: K) -> silk/option.Option<V>
```

Returns the value held under a key equivalent to one probe key, or an absent value.
Expand Down Expand Up @@ -270,7 +270,7 @@ count unchanged.
## `remove`

```silk
pub fn remove<K, V>(self: &mut silk/hash_map.HashMap<K, V>, key: K) -> Option<V>
pub fn remove<K, V>(self: &mut silk/hash_map.HashMap<K, V>, key: K) -> silk/option.Option<V>
```

Removes the entry under a key equivalent to one probe key and answers with its value.
Expand Down
4 changes: 2 additions & 2 deletions apps/docs/content/language/stdlib/hash-set.md
Original file line number Diff line number Diff line change
Expand Up @@ -214,7 +214,7 @@ This function consumes the probe element. It does not change the set or move a s
## `indexOf`

```silk
pub fn indexOf<T>(self: &silk/hash_set.HashSet<T>, value: T) -> Option<usize>
pub fn indexOf<T>(self: &silk/hash_set.HashSet<T>, value: T) -> silk/option.Option<usize>
```

Returns the bucket holding an element equivalent to one probe element, or an absent value.
Expand All @@ -229,7 +229,7 @@ This function consumes the probe element.
## `remove`

```silk
pub fn remove<T>(self: &mut silk/hash_set.HashSet<T>, value: T) -> Option<T>
pub fn remove<T>(self: &mut silk/hash_set.HashSet<T>, value: T) -> silk/option.Option<T>
```

Removes the element equivalent to one probe element and answers with it.
Expand Down
12 changes: 6 additions & 6 deletions apps/docs/content/language/stdlib/host-input.md
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ lossless pass-through.
## Details

Arguments include the program name at index zero and retain host order. A missing argument index
or unset variable is [`None`](./option.md#declaration-73696c6b2f6f7074696f6e3a3a4e6f6e65), while [`HostInputError`](#declaration-73696c6b2f686f73745f696e7075743a3a486f7374496e7075744572726f72) means the provider could not answer.
or unset variable is [`None`](./option.md#declaration-73696c6b2f6f7074696f6e3a3a4f7074696f6e3a3a76617269616e743a30), while [`HostInputError`](#declaration-73696c6b2f686f73745f696e7075743a3a486f7374496e7075744572726f72) means the provider could not answer.
Returned [`Bytes`](./bytes.md#declaration-73696c6b2f62797465733a3a4279746573) values are independently owned, so lookup operations also carry explicit
[`OutOfMemoryError`](./allocator.md#declaration-73696c6b2f616c6c6f6361746f723a3a4f75744f664d656d6f72794572726f72) and [`Allocator`](./allocator.md#declaration-73696c6b2f616c6c6f6361746f723a3a416c6c6f6361746f72) channels.

Expand Down Expand Up @@ -152,7 +152,7 @@ A provider that cannot inspect the process arguments fails with `HostInputError`
### Operation `argument`

```silk
effect fn argument(index: usize) -> Option<silk/bytes.Bytes> ! HostInputError | OutOfMemoryError ? &mut HostInput | &mut Allocator
effect fn argument(index: usize) -> silk/option.Option<silk/bytes.Bytes> ! HostInputError | OutOfMemoryError ? &mut HostInput | &mut Allocator
```

Copies one argument as raw bytes, or returns `None` when `index` is out of range.
Expand All @@ -167,7 +167,7 @@ produces `HostInputError`; ownership allocation produces `OutOfMemoryError`.
### Operation `variable`

```silk
effect fn variable(name: &[u8]) -> Option<silk/bytes.Bytes> ! HostInputError | OutOfMemoryError ? &mut HostInput | &mut Allocator
effect fn variable(name: &[u8]) -> silk/option.Option<silk/bytes.Bytes> ! HostInputError | OutOfMemoryError ? &mut HostInput | &mut Allocator
```

Copies one environment value as raw bytes, or returns `None` when `name` is unset.
Expand Down Expand Up @@ -212,7 +212,7 @@ The count includes the program name at index zero. Provider failure produces
## `argument`

```silk
pub effect fn argument(index: usize) -> Option<silk/bytes.Bytes> ! HostInputError | OutOfMemoryError ? &mut HostInput | &mut Allocator
pub effect fn argument(index: usize) -> silk/option.Option<silk/bytes.Bytes> ! HostInputError | OutOfMemoryError ? &mut HostInput | &mut Allocator
```

Copies one process argument through the active [`HostInput`](#declaration-73696c6b2f686f73745f696e7075743a3a486f7374496e707574) provider.
Expand All @@ -227,7 +227,7 @@ independently owned and can contain bytes that are not valid UTF-8.
## `variable`

```silk
pub effect fn variable(name: &[u8]) -> Option<silk/bytes.Bytes> ! HostInputError | OutOfMemoryError ? &mut HostInput | &mut Allocator
pub effect fn variable(name: &[u8]) -> silk/option.Option<silk/bytes.Bytes> ! HostInputError | OutOfMemoryError ? &mut HostInput | &mut Allocator
```

Copies one environment value selected by a raw byte name.
Expand All @@ -242,7 +242,7 @@ process environment. The returned [`Bytes`](./bytes.md#declaration-73696c6b2f627
## `variableNamed`

```silk
pub effect fn variableNamed(name: string) -> Option<silk/bytes.Bytes> ! HostInputError | OutOfMemoryError ? &mut HostInput | &mut Allocator
pub effect fn variableNamed(name: string) -> silk/option.Option<silk/bytes.Bytes> ! HostInputError | OutOfMemoryError ? &mut HostInput | &mut Allocator
```

Copies one environment value selected by a valid UTF-8 name.
Expand Down
30 changes: 15 additions & 15 deletions apps/docs/content/language/stdlib/i16.md
Original file line number Diff line number Diff line change
Expand Up @@ -118,7 +118,7 @@ this function when an out-of-range value is a program error.
## `checkedToU8`

```silk
pub fn checkedToU8(value: i16) -> Option<u8>
pub fn checkedToU8(value: i16) -> silk/option.Option<u8>
```

Converts `value` to `u8`, or returns `None` if `value` is outside the `u8`
Expand All @@ -140,7 +140,7 @@ this function when an out-of-range value is a program error.
## `checkedToU16`

```silk
pub fn checkedToU16(value: i16) -> Option<u16>
pub fn checkedToU16(value: i16) -> silk/option.Option<u16>
```

Converts `value` to `u16`, or returns `None` if `value` is outside the `u16`
Expand All @@ -162,7 +162,7 @@ this function when an out-of-range value is a program error.
## `checkedToU32`

```silk
pub fn checkedToU32(value: i16) -> Option<u32>
pub fn checkedToU32(value: i16) -> silk/option.Option<u32>
```

Converts `value` to `u32`, or returns `None` if `value` is outside the `u32`
Expand All @@ -184,7 +184,7 @@ this function when an out-of-range value is a program error.
## `checkedToU64`

```silk
pub fn checkedToU64(value: i16) -> Option<u64>
pub fn checkedToU64(value: i16) -> silk/option.Option<u64>
```

Converts `value` to `u64`, or returns `None` if `value` is outside the `u64`
Expand All @@ -206,7 +206,7 @@ this function when an out-of-range value is a program error.
## `checkedToUsize`

```silk
pub fn checkedToUsize(value: i16) -> Option<usize>
pub fn checkedToUsize(value: i16) -> silk/option.Option<usize>
```

Converts `value` to `usize`, or returns `None` if `value` is outside the `usize`
Expand All @@ -228,7 +228,7 @@ this function when an out-of-range value is a program error.
## `checkedToI8`

```silk
pub fn checkedToI8(value: i16) -> Option<i8>
pub fn checkedToI8(value: i16) -> silk/option.Option<i8>
```

Converts `value` to `i8`, or returns `None` if `value` is outside the `i8`
Expand All @@ -250,7 +250,7 @@ can select `i16` as both source and destination.
## `checkedToI16`

```silk
pub fn checkedToI16(value: i16) -> Option<i16>
pub fn checkedToI16(value: i16) -> silk/option.Option<i16>
```

Returns `Some` with `value` unchanged as `i16`. Use this function when generic
Expand All @@ -271,7 +271,7 @@ Converts `value` exactly to `i32`. Every `i16` value is representable.
## `checkedToI32`

```silk
pub fn checkedToI32(value: i16) -> Option<i32>
pub fn checkedToI32(value: i16) -> silk/option.Option<i32>
```

Converts `value` exactly to `i32` and returns `Some`. Every `i16` value is
Expand All @@ -292,7 +292,7 @@ Converts `value` exactly to `i64`. Every `i16` value is representable.
## `checkedToI64`

```silk
pub fn checkedToI64(value: i16) -> Option<i64>
pub fn checkedToI64(value: i16) -> silk/option.Option<i64>
```

Converts `value` exactly to `i64` and returns `Some`. Every `i16` value is
Expand All @@ -313,7 +313,7 @@ Converts `value` exactly to `isize`. Every `i16` value is representable.
## `checkedToIsize`

```silk
pub fn checkedToIsize(value: i16) -> Option<isize>
pub fn checkedToIsize(value: i16) -> silk/option.Option<isize>
```

Converts `value` exactly to `isize` and returns `Some`. Every `i16` value is
Expand Down Expand Up @@ -547,7 +547,7 @@ boundary value is the required overflow result.
## `checkedAdd`

```silk
pub fn checkedAdd(left: i16, right: i16) -> Option<i16>
pub fn checkedAdd(left: i16, right: i16) -> silk/option.Option<i16>
```

Returns `Some` with `left + right`, or `None` if the result is outside the `i16` range.
Expand All @@ -558,7 +558,7 @@ Use this function when overflow is input data.
## `checkedSubtract`

```silk
pub fn checkedSubtract(left: i16, right: i16) -> Option<i16>
pub fn checkedSubtract(left: i16, right: i16) -> silk/option.Option<i16>
```

Returns `Some` with `left - right`, or `None` if the result is outside the `i16` range.
Expand All @@ -569,7 +569,7 @@ Use this function when overflow is input data.
## `checkedMultiply`

```silk
pub fn checkedMultiply(left: i16, right: i16) -> Option<i16>
pub fn checkedMultiply(left: i16, right: i16) -> silk/option.Option<i16>
```

Returns `Some` with `left * right`, or `None` if the result is outside the `i16` range.
Expand All @@ -580,7 +580,7 @@ Use this function when overflow is input data.
## `checkedDivide`

```silk
pub fn checkedDivide(left: i16, right: i16) -> Option<i16>
pub fn checkedDivide(left: i16, right: i16) -> silk/option.Option<i16>
```

Returns `Some` with `left / right`, or `None` if `right` is zero or [`MIN`](#declaration-73696c6b2f6931363a3a4d494e) is
Expand All @@ -591,7 +591,7 @@ divided by `-1`. Use this function when an invalid quotient is input data.
## `checkedRemainder`

```silk
pub fn checkedRemainder(left: i16, right: i16) -> Option<i16>
pub fn checkedRemainder(left: i16, right: i16) -> silk/option.Option<i16>
```

Returns `Some` with the remainder, or `None` if `right` is zero or [`MIN`](#declaration-73696c6b2f6931363a3a4d494e) is
Expand Down
Loading
Loading