~repos /plum

#treesitter#compiler#wasm

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

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


90e6cd46 pyrossh

1 year ago
updates
Files changed (1) hide show
  1. readme.md +28 -66
readme.md CHANGED
@@ -36,13 +36,8 @@ fn factorial(n: int): int =
36
36
  a -> 1
37
37
  _ -> n * factorial(n - 1)
38
38
 
39
- fn firstItem(l: list[int]): option[int] =
39
+ fn firstItem(items: list[int]): option[int] =
40
- l[0]
41
-
42
- fn firstItem(l: list[int]): option[int] =
43
- match l
44
- [] -> none
40
+ items.get(0)
45
- [head, ...rest] -> head
46
41
 
47
42
  fn toCelsius(f: float): float =
48
43
  (f - 32) * (5 / 9)
@@ -226,17 +221,17 @@ age := 1
226
221
  printLn("Name ${name} age ${age}")
227
222
  ```
228
223
 
229
- ##list
224
+ ## list
230
225
 
231
226
  ```py
232
- import pacos/list
227
+ import std/list
233
228
 
234
229
  a := List.of(1, 2, 3) # List[int]
235
230
  b := List.of( # List[List[int]]
236
231
  List.of(1),
237
232
  List.of(2),
238
233
  List.of(3),
239
- )
234
+ )
240
235
  c := List.of(1, 2, 3 * 4, 8, n)
241
236
 
242
237
  actors := List.of("Krabs", "Squidward")
@@ -255,23 +250,23 @@ items
255
250
  ## map
256
251
 
257
252
  ```rs
258
- import pacos/map
253
+ import std/map
259
254
 
260
- nums := Map.of(:one => 1, :two => 2)
255
+ nums := Map.of("one" => 1, "two" => 2)
261
- map.get(:one) // => 1
256
+ map.get("one") // => some(1)
262
- map.get(:unknown) // => nil
257
+ map.get("unknown") // => none
263
258
  friends_tree := Map.of(
264
- :value => "Fred",
259
+ "value" => "Fred",
265
- :left => Map.of(
260
+ "left" => Map.of(
266
- :value => "Jim",
261
+ "value" => "Jim",
267
262
  ),
268
- :right => Map.of(
263
+ "right" => Map.of(
269
- :value => "Shiela",
264
+ "value" => "Shiela",
270
- :left => Map.of(
265
+ "left" => Map.of(
271
- :value => "Alice",
266
+ "value" => "Alice",
272
267
  ),
273
- :right => Map.of(
268
+ "right" => Map.of(
274
- :value => "Bob"
269
+ "value" => "Bob"
275
270
  ),
276
271
  ),
277
272
  )
@@ -321,7 +316,7 @@ record IOError()
321
316
  record JsonParseError()
322
317
 
323
318
  #[error("Version is nil")]
324
- record ParseError()
319
+ record ParseVersionError()
325
320
 
326
321
  #[json]
327
322
  record UserData(
@@ -330,59 +325,26 @@ record UserData(
330
325
  roles: List[str]
331
326
  )
332
327
 
333
- fn parse_version(header: List[int]): result[int, ParseError] =
328
+ fn parseVersion(header: List[int]): result[int, ParseVersionError] =
334
329
  header.get(0) ?: ParseError()
335
330
 
336
- fn double_number(s: str): result[int] =
331
+ fn doubleNumber(s: str): result[int] =
337
332
  number_str.parse_int().map(|n| 2 * n)
338
333
 
339
- fn fetch_data(route: str): result[UserData] =
334
+ fn fetchData(route: str): result[UserData] =
340
335
  response := fetch(route)?
341
336
  data := response.body.readAll()?
342
- parse_json(data)?
337
+ parseJson(data)?
343
338
 
344
339
  fn main(): result[int] =
345
- double_number("10")?
340
+ n := doubleNumber("10")?
346
- version := parse_version(list.of(1, 2))?
341
+ version := parseVersion(list.of(1, 2))?
347
- conn := pg.connect()?
348
-
349
- pg.connect()
350
- .map(|| 0)
351
- .map_err(|| 1)?
352
-
353
- match pg.connect()
354
- ok(c) -> return 0
355
- err(e) -> return e
356
-
357
- res := fetch_data()
342
+ res := fetchData()
358
343
  match res
359
- ok(u) -> u.id
344
+ ok(u) -> return ok(u.id)
360
345
  err(IOError(e)) -> printLn("IO failed")
361
346
  err(e) -> printLn("generic error ${e.msg()}")
362
347
  ok(0)
363
-
364
- fn connect_db(conn_url: str): result[DB] =
365
- db := postgres_connect(conn_url)?
366
- db.exec("select 1")?
367
-
368
- record DB(conn_url: str)
369
-
370
- #[error]
371
- enum DatabaseError
372
- NotOnline(conn_url: str)
373
- RowReadFailure(query: str)
374
-
375
- fn newDB(conn_url: str) result[DB, DatabaseError] =
376
- db := DB(conn_url: str)
377
- online := db.check()?
378
- if !online
379
- err(DatabaseError(conn_url))
380
- else
381
- db
382
-
383
- fn db_select(conn_url: str): result[unit, DatabaseError] =
384
- db := newDB(conn_url)
385
- db.exec("select 1")?
386
348
  ```
387
349
 
388
350
  **constants**
@@ -631,4 +593,4 @@ fn add[T: int | float](a: List[T], b: List[T]): List[T] =
631
593
 
632
594
  ## Todo
633
595
 
634
- linter, formatter, test runner, language server, package manager
596
+ linter, formatter, test runner, language server, package manager