~repos /plum
git clone https://pyrossh.dev/repos/plum.git
A statically typed, imperative programming language inspired by rust, python
5ff7fdda
—
pyrossh 1 year ago
update
- readme.md +17 -5
- std/result.mi +6 -6
readme.md
CHANGED
|
@@ -318,6 +318,9 @@ record IOError()
|
|
|
318
318
|
#[error]
|
|
319
319
|
record JsonParseError()
|
|
320
320
|
|
|
321
|
+
#[error("Version is nil")]
|
|
322
|
+
record ParseError()
|
|
323
|
+
|
|
321
324
|
#[json]
|
|
322
325
|
record UserData(
|
|
323
326
|
id: int,
|
|
@@ -325,8 +328,8 @@ record UserData(
|
|
|
325
328
|
roles: List[str]
|
|
326
329
|
)
|
|
327
330
|
|
|
328
|
-
fn parse_version(header: List[int]): result[
|
|
331
|
+
fn parse_version(header: List[int]): result[int, ParseError] =
|
|
329
|
-
header.get(0)
|
|
332
|
+
header.get(0) ?: ParseError()
|
|
330
333
|
|
|
331
334
|
fn double_number(s: str): result[int] =
|
|
332
335
|
number_str.parse_int().map(|n| 2 * n)
|
|
@@ -338,8 +341,12 @@ fn fetch_data(route: str): result[UserData] =
|
|
|
338
341
|
|
|
339
342
|
fn main(): result[int] =
|
|
340
343
|
double_number("10")?
|
|
341
|
-
version := parse_version(list.of(1, 2))
|
|
344
|
+
version := parse_version(list.of(1, 2))?
|
|
342
345
|
conn := pg.connect()?
|
|
346
|
+
|
|
347
|
+
pg.connect()
|
|
348
|
+
.map(|| 0)
|
|
349
|
+
.map_err(|| 1)?
|
|
343
350
|
|
|
344
351
|
match pg.connect()
|
|
345
352
|
ok(c) -> return 0
|
|
@@ -351,6 +358,11 @@ fn main(): result[int] =
|
|
|
351
358
|
err(IOError(e)) -> printLn("IO failed")
|
|
352
359
|
err(e) -> printLn("generic error ${e.msg()}")
|
|
353
360
|
ok(0)
|
|
361
|
+
|
|
362
|
+
if Some(color) = favorite_color
|
|
363
|
+
printLn("Hello ${color}")
|
|
364
|
+
else
|
|
365
|
+
println("qwe")
|
|
354
366
|
```
|
|
355
367
|
|
|
356
368
|
**constants**
|
|
@@ -556,8 +568,8 @@ type Seq2[K, V] = fn(yield: fn(K, V): bool): bool
|
|
|
556
568
|
|
|
557
569
|
record Tree[E](
|
|
558
570
|
value E,
|
|
559
|
-
left:
|
|
571
|
+
left: Option[Tree],
|
|
560
|
-
right:
|
|
572
|
+
right: Option[Tree],
|
|
561
573
|
)
|
|
562
574
|
|
|
563
575
|
fn (t Tree[E]) op_range(yld: fn(E): bool): bool =
|
std/result.mi
CHANGED
|
@@ -4,18 +4,18 @@ trait Error(
|
|
|
4
4
|
`This is used to represent an error value across the language
|
|
5
5
|
fn code(): int
|
|
6
6
|
fn msg(): str
|
|
7
|
-
fn cause():
|
|
7
|
+
fn cause(): Option[Error]
|
|
8
8
|
)
|
|
9
9
|
|
|
10
|
-
enum result[T]
|
|
10
|
+
enum result[T, E: Error = Error]
|
|
11
11
|
`result is a type that represents either success ok or failure err.
|
|
12
12
|
| ok(T)
|
|
13
|
-
| err(
|
|
13
|
+
| err(E)
|
|
14
14
|
|
|
15
15
|
fn (r result) isOk(): bool =
|
|
16
16
|
match o
|
|
17
|
-
ok(v) ->
|
|
17
|
+
ok(v) -> true
|
|
18
|
-
err(e) ->
|
|
18
|
+
err(e) -> false
|
|
19
19
|
|
|
20
20
|
fn (r result) isErr(): bool =
|
|
21
21
|
!o.is_ok()
|
|
@@ -23,7 +23,7 @@ fn (r result) isErr(): bool =
|
|
|
23
23
|
fn (r result) get(): T =
|
|
24
24
|
match o
|
|
25
25
|
ok(v) -> v
|
|
26
|
-
err(e) ->
|
|
26
|
+
err(e) -> crash("called `result.get()` on a `none` value")
|
|
27
27
|
|
|
28
28
|
fn (r result) getOrElse(d: T): T =
|
|
29
29
|
match o
|