-
-
Notifications
You must be signed in to change notification settings - Fork 137
/
map.gleam
127 lines (105 loc) 路 3.07 KB
/
map.gleam
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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
import gleam/option.{type Option}
import gleam/dict
@deprecated("Please use the `gleam/dict` module instead")
pub type Map(key, value) =
dict.Dict(key, value)
@deprecated("Please use the `gleam/dict` module instead")
pub fn size(map) -> Int {
dict.size(map)
}
@deprecated("Please use the `gleam/dict` module instead")
pub fn to_list(map) -> List(#(key, value)) {
dict.to_list(map)
}
@deprecated("Please use the `gleam/dict` module instead")
pub fn from_list(list: List(#(k, v))) {
dict.from_list(list)
}
@deprecated("Please use the `gleam/dict` module instead")
pub fn has_key(map, key: k) -> Bool {
dict.has_key(map, key)
}
@deprecated("Please use the `gleam/dict` module instead")
pub fn new() {
dict.new()
}
@deprecated("Please use the `gleam/dict` module instead")
pub fn get(from, get: key) -> Result(value, Nil) {
dict.get(from, get)
}
@deprecated("Please use the `gleam/dict` module instead")
pub fn insert(into map, for key: k, insert value: v) {
dict.insert(map, key, value)
}
@deprecated("Please use the `gleam/dict` module instead")
pub fn map_values(in map, with fun: fn(k, v) -> w) {
dict.map_values(map, fun)
}
@deprecated("Please use the `gleam/dict` module instead")
pub fn keys(map) -> List(keys) {
dict.keys(map)
}
@target(javascript)
fn reverse_and_concat(remaining, accumulator) {
case remaining {
[] -> accumulator
[item, ..rest] -> reverse_and_concat(rest, [item, ..accumulator])
}
}
@target(javascript)
fn do_keys_acc(list: List(#(k, v)), acc: List(k)) -> List(k) {
case list {
[] -> reverse_and_concat(acc, [])
[x, ..xs] -> do_keys_acc(xs, [x.0, ..acc])
}
}
@target(javascript)
fn do_keys(map) -> List(k) {
let list_of_pairs =
map
|> to_list
do_keys_acc(list_of_pairs, [])
}
@deprecated("Please use the `gleam/dict` module instead")
pub fn values(map) -> List(values) {
dict.values(map)
}
@deprecated("Please use the `gleam/dict` module instead")
pub fn filter(in map, keeping predicate: fn(k, v) -> Bool) {
dict.filter(map, predicate)
}
@target(javascript)
fn do_filter(f: fn(key, value) -> Bool, map) {
let insert = fn(map, k, v) {
case f(k, v) {
True -> insert(map, k, v)
_ -> map
}
}
map
|> fold(from: new(), with: insert)
}
@deprecated("Please use the `gleam/dict` module instead")
pub fn take(from map, keeping desired_keys: List(k)) {
dict.take(map, desired_keys)
}
@deprecated("Please use the `gleam/dict` module instead")
pub fn merge(into map, from new_entries) {
dict.merge(map, new_entries)
}
@deprecated("Please use the `gleam/dict` module instead")
pub fn delete(from map, delete key: k) {
dict.delete(map, key)
}
@deprecated("Please use the `gleam/dict` module instead")
pub fn drop(from map, drop disallowed_keys: List(k)) {
dict.drop(map, disallowed_keys)
}
@deprecated("Please use the `gleam/dict` module instead")
pub fn update(in map, update key: k, with fun: fn(Option(v)) -> v) {
dict.update(map, key, fun)
}
@deprecated("Please use the `gleam/dict` module instead")
pub fn fold(over map, from initial: acc, with fun: fn(acc, k, v) -> acc) -> acc {
dict.fold(map, initial, fun)
}