Skip to content

Commit 7427eb2

Browse files
committed
✨ Enable record updates on atoms with record payloads
1 parent 971574c commit 7427eb2

File tree

2 files changed

+15
-6
lines changed

2 files changed

+15
-6
lines changed

templates/src/Spark/List.spark

+4-4
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,14 @@
11
def pub map\list, fn =
22
external "
3-
return over.map((x) => fn(x));
3+
return list.map((x) => fn(x));
44
"
55

66
def pub index_map\list, fn =
77
external "
8-
return over.map((x, i) => fn(x, i));
8+
return list.map((x, i) => fn(x, i));
99
"
1010

11-
def pub fold\over, acc, fn =
11+
def pub fold\list, acc, fn =
1212
external "
13-
return over.reduce((acc, x) => fn(acc, x), acc);
13+
return list.reduce((acc, x) => fn(acc, x), acc);
1414
"

templates/src/spark.prelude.mjs

+11-2
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,10 @@ export class Atom {
33
this.name = name;
44
this.payload = payload ?? [];
55
}
6+
7+
static hasRecordPayload(atom) {
8+
return atom instanceof Atom && atom.payload[0] instanceof Record;
9+
}
610
}
711

812
export function ok(payload) {
@@ -22,14 +26,19 @@ export class Record extends Map {
2226
if (!(record instanceof Record)) throw new Error(msg);
2327
}
2428

25-
static updateRecord(record, fields) {
29+
static update(record, fields) {
30+
if (Atom.hasRecordPayload(record)) {
31+
record = record.payload[0];
32+
}
33+
2634
Record.assertRecord(record, 'Cannot update a non-record');
35+
2736
return new Record([...record, ...fields]);
2837
}
2938

3039
static access(record, field) {
3140
// An atom can be accessed if the first value in its payload is a record.
32-
if (record instanceof Atom && record.payload[0] instanceof Record) {
41+
if (Atom.hasRecordPayload(record)) {
3342
record = record.payload[0];
3443
}
3544

0 commit comments

Comments
 (0)