~repos /plum

#treesitter#compiler#wasm

git clone https://pyrossh.dev/repos/plum.git

A statically typed, imperative programming language inspired by rust, python


5ff7fdda pyrossh

1 year ago
update
Files changed (2) hide show
  1. readme.md +17 -5
  2. 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[Version, error] =
331
+ fn parse_version(header: List[int]): result[int, ParseError] =
329
- header.get(0) != nil ? v : error.InvalidHeaderLength(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: option[Tree[E]],
571
+ left: Option[Tree],
560
- right: option[Tree[E]],
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(): option<Error>
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(Error)
13
+ | err(E)
14
14
 
15
15
  fn (r result) isOk(): bool =
16
16
  match o
17
- ok(v) -> return true
17
+ ok(v) -> true
18
- err(e) -> return false
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) -> panic("called `result.get()` on a `none` value")
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