add generics

This commit is contained in:
paul committed 2026-10-23 02:13:30 -04:00
1 parent 79533e9537
commit 2204d58102
22 files changed
+47358 -37579

No files matched your search

+2 -2
View File
@@ -6,8 +6,8 @@ more_codes := [...codes, 'failed' => 500]
empty_numbers: []i32: []
empty_codes: [str]i32: []
optional_numbers: []i32?: nil
optional_elements: []{i32?}: [nil, some 1]
optional_numbers: []i32?: |.none
optional_elements: []{i32?}: [|.none, 1->|.some]
Options :: &{
name: str: 'default'
+2 -2
View File
@@ -11,10 +11,10 @@ choose_block: (bit, i32, i32) -> i32: @ (condition: bit, when_true: i32, when_fa
first_positive: []i32 -> i32?: @ values: []i32 {
for value in values {
if value > 0 {
return some value
return value->|.some
}
}
nil
|.none
}
labelled_search: []i32 -> i32: @ values: []i32 { loop `outer {
+5
View File
@@ -0,0 +1,5 @@
add_ten: i32 -> i32: @ value: i32 { value + 10 }
double: i32 -> i32: @ value: i32 { value * 2 }
# Stages bind tighter than prefix and infix operators: -{3->add_ten} + 2 * {3->double}.
mixed: i32: -3->add_ten + 2 * 3->double - {1 + 1}->double
+2 -2
View File
@@ -15,9 +15,9 @@ commented := 'value' # an inline comment preserves continuation
computed := 1 + 2
->to_str
fallible: i32 -> i32 ! Error: @ value: i32 { ok value }
fallible: i32 -> i32 ! Error: @ value: i32 { value->|.ok }
propagate: i32 -> i32 ! Error: @ value: i32 {
result := {value->fallible}?
ok result
result->|.ok
}
-19
View File
@@ -1,19 +0,0 @@
use math.{pi, sqrt}
use math as m
use random.{Pcg32, pcg32, draw_u32}
use time.{Duration, TimeError, duration_neg}
use time as t
circle: f64: pi
root: f64: 4.0->sqrt
# Host overloads are selected by the operand, so the literal is typed first.
nine: f32: 9.0
qualified_root: f32: nine->m.sqrt
qualified_pi: f32: m.pi
seed: u64: 42
generator: Pcg32: seed->pcg32
draw: u32: generator->draw_u32
negate: Duration => Duration ! TimeError: duration_neg
qualified_negate: t.Duration => t.Duration ! t.TimeError: t.duration_neg
-24
View File
@@ -1,24 +0,0 @@
present: i32?: some 1
absent: i32?: nil
success: i32 ! str: ok 1
failure: i32 ! str: err 'failed'
piped: i32?: some 4->double
grouped: i32?: some {4->double}
double :: @ value { value * 2 }
describe :: @ (label: str, count) -> str { label }
unwrap_or: i32? -> i32: @ value {
match value {
some inner => inner
nil => 0
}
}
handle: i32 ! str -> i32: @ result {
match result {
ok value if value > 0 => value
ok _ => 0
err message => message->length
}
}