-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathSymTblStack.roc
More file actions
31 lines (26 loc) · 801 Bytes
/
SymTblStack.roc
File metadata and controls
31 lines (26 loc) · 801 Bytes
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
module [SymTblStack, get, set]
import Stack exposing [Stack]
import SymTbl exposing [SymTbl, SymTblId]
import ResultUtils exposing [result_flatmap]
SymTblStack a := Stack (SymTbl a)
SymTblStackId := {
level : U64, # zero-indexed
key : SymTblId,
}
get : SymTblStack a, SymTblStackId -> Result a {}
get = |@SymTblStack(tree), @SymTblStackId(st_key)|
Stack.peek_at(tree, st_key.level)
|> Result.map_err(|_| {})
|> result_flatmap(
|level|
SymTbl.get(level, st_key.key),
)
set : SymTblStack a, SymTblStackId, a -> SymTblStack a
set = |@SymTblStack(sym_tbl_stack), @SymTblStackId(item_id), value|
Stack.update(
sym_tbl_stack,
item_id.level,
|sym_tbl|
SymTbl.set(sym_tbl, item_id.key, value),
)
|> @SymTblStack