ic-mops 0.8.5 → 0.8.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +3 -1
- package/.mops/base@0.7.4/LICENSE +0 -208
- package/.mops/base@0.7.4/README.md +0 -64
- package/.mops/base@0.7.4/mops.toml +0 -5
- package/.mops/base@0.7.4/src/Array.mo +0 -686
- package/.mops/base@0.7.4/src/AssocList.mo +0 -203
- package/.mops/base@0.7.4/src/Blob.mo +0 -55
- package/.mops/base@0.7.4/src/Bool.mo +0 -44
- package/.mops/base@0.7.4/src/Buffer.mo +0 -1937
- package/.mops/base@0.7.4/src/CertifiedData.mo +0 -29
- package/.mops/base@0.7.4/src/Char.mo +0 -67
- package/.mops/base@0.7.4/src/Debug.mo +0 -15
- package/.mops/base@0.7.4/src/Deque.mo +0 -75
- package/.mops/base@0.7.4/src/Error.mo +0 -41
- package/.mops/base@0.7.4/src/ExperimentalCycles.mo +0 -51
- package/.mops/base@0.7.4/src/ExperimentalInternetComputer.mo +0 -36
- package/.mops/base@0.7.4/src/ExperimentalStableMemory.mo +0 -121
- package/.mops/base@0.7.4/src/Float.mo +0 -150
- package/.mops/base@0.7.4/src/Func.mo +0 -38
- package/.mops/base@0.7.4/src/Hash.mo +0 -83
- package/.mops/base@0.7.4/src/HashMap.mo +0 -229
- package/.mops/base@0.7.4/src/Heap.mo +0 -113
- package/.mops/base@0.7.4/src/Int.mo +0 -150
- package/.mops/base@0.7.4/src/Int16.mo +0 -159
- package/.mops/base@0.7.4/src/Int32.mo +0 -160
- package/.mops/base@0.7.4/src/Int64.mo +0 -161
- package/.mops/base@0.7.4/src/Int8.mo +0 -160
- package/.mops/base@0.7.4/src/Iter.mo +0 -220
- package/.mops/base@0.7.4/src/IterType.mo +0 -7
- package/.mops/base@0.7.4/src/List.mo +0 -433
- package/.mops/base@0.7.4/src/Nat.mo +0 -75
- package/.mops/base@0.7.4/src/Nat16.mo +0 -146
- package/.mops/base@0.7.4/src/Nat32.mo +0 -146
- package/.mops/base@0.7.4/src/Nat64.mo +0 -146
- package/.mops/base@0.7.4/src/Nat8.mo +0 -146
- package/.mops/base@0.7.4/src/None.mo +0 -19
- package/.mops/base@0.7.4/src/Option.mo +0 -160
- package/.mops/base@0.7.4/src/Order.mo +0 -46
- package/.mops/base@0.7.4/src/Prelude.mo +0 -33
- package/.mops/base@0.7.4/src/Principal.mo +0 -58
- package/.mops/base@0.7.4/src/RBTree.mo +0 -218
- package/.mops/base@0.7.4/src/Random.mo +0 -188
- package/.mops/base@0.7.4/src/Result.mo +0 -210
- package/.mops/base@0.7.4/src/Stack.mo +0 -40
- package/.mops/base@0.7.4/src/Text.mo +0 -615
- package/.mops/base@0.7.4/src/Time.mo +0 -37
- package/.mops/base@0.7.4/src/Trie.mo +0 -1200
- package/.mops/base@0.7.4/src/TrieMap.mo +0 -180
- package/.mops/base@0.7.4/src/TrieSet.mo +0 -97
- package/.mops/base@0.8.3/LICENSE +0 -208
- package/.mops/base@0.8.3/README.md +0 -64
- package/.mops/base@0.8.3/mops.toml +0 -6
- package/.mops/base@0.8.3/src/Array.mo +0 -717
- package/.mops/base@0.8.3/src/AssocList.mo +0 -404
- package/.mops/base@0.8.3/src/Blob.mo +0 -212
- package/.mops/base@0.8.3/src/Bool.mo +0 -44
- package/.mops/base@0.8.3/src/Buffer.mo +0 -2660
- package/.mops/base@0.8.3/src/CertifiedData.mo +0 -53
- package/.mops/base@0.8.3/src/Char.mo +0 -65
- package/.mops/base@0.8.3/src/Debug.mo +0 -56
- package/.mops/base@0.8.3/src/Deque.mo +0 -243
- package/.mops/base@0.8.3/src/Error.mo +0 -68
- package/.mops/base@0.8.3/src/ExperimentalCycles.mo +0 -151
- package/.mops/base@0.8.3/src/ExperimentalInternetComputer.mo +0 -60
- package/.mops/base@0.8.3/src/ExperimentalStableMemory.mo +0 -348
- package/.mops/base@0.8.3/src/Float.mo +0 -843
- package/.mops/base@0.8.3/src/Func.mo +0 -46
- package/.mops/base@0.8.3/src/Hash.mo +0 -82
- package/.mops/base@0.8.3/src/HashMap.mo +0 -457
- package/.mops/base@0.8.3/src/Heap.mo +0 -233
- package/.mops/base@0.8.3/src/Int.mo +0 -365
- package/.mops/base@0.8.3/src/Int16.mo +0 -521
- package/.mops/base@0.8.3/src/Int32.mo +0 -522
- package/.mops/base@0.8.3/src/Int64.mo +0 -522
- package/.mops/base@0.8.3/src/Int8.mo +0 -522
- package/.mops/base@0.8.3/src/Iter.mo +0 -227
- package/.mops/base@0.8.3/src/IterType.mo +0 -7
- package/.mops/base@0.8.3/src/List.mo +0 -930
- package/.mops/base@0.8.3/src/Nat.mo +0 -305
- package/.mops/base@0.8.3/src/Nat16.mo +0 -144
- package/.mops/base@0.8.3/src/Nat32.mo +0 -144
- package/.mops/base@0.8.3/src/Nat64.mo +0 -144
- package/.mops/base@0.8.3/src/Nat8.mo +0 -144
- package/.mops/base@0.8.3/src/None.mo +0 -19
- package/.mops/base@0.8.3/src/Option.mo +0 -154
- package/.mops/base@0.8.3/src/Order.mo +0 -46
- package/.mops/base@0.8.3/src/Prelude.mo +0 -33
- package/.mops/base@0.8.3/src/Principal.mo +0 -249
- package/.mops/base@0.8.3/src/RBTree.mo +0 -681
- package/.mops/base@0.8.3/src/Random.mo +0 -270
- package/.mops/base@0.8.3/src/Result.mo +0 -209
- package/.mops/base@0.8.3/src/Stack.mo +0 -93
- package/.mops/base@0.8.3/src/Text.mo +0 -761
- package/.mops/base@0.8.3/src/Time.mo +0 -36
- package/.mops/base@0.8.3/src/Timer.mo +0 -62
- package/.mops/base@0.8.3/src/Trie.mo +0 -1603
- package/.mops/base@0.8.3/src/TrieMap.mo +0 -392
- package/.mops/base@0.8.3/src/TrieSet.mo +0 -148
- package/network.txt +0 -1
|
@@ -1,210 +0,0 @@
|
|
|
1
|
-
/// Error handling with the Result type.
|
|
2
|
-
|
|
3
|
-
import Prim "mo:⛔";
|
|
4
|
-
import P "Prelude";
|
|
5
|
-
import Order "Order";
|
|
6
|
-
|
|
7
|
-
module {
|
|
8
|
-
|
|
9
|
-
/// `Result<Ok, Err>` is the type used for returning and propagating errors. It
|
|
10
|
-
/// is a type with the variants, `#ok(Ok)`, representing success and containing
|
|
11
|
-
/// a value, and `#err(Err)`, representing error and containing an error value.
|
|
12
|
-
///
|
|
13
|
-
/// The simplest way of working with `Result`s is to pattern match on them:
|
|
14
|
-
///
|
|
15
|
-
/// For example, given a function `createUser(user : User) : Result<Id, String>`
|
|
16
|
-
/// where `String` is an error message we could use it like so:
|
|
17
|
-
/// ```motoko no-repl
|
|
18
|
-
/// switch(createUser(myUser)) {
|
|
19
|
-
/// case (#ok(id)) { Debug.print("Created new user with id: " # id) };
|
|
20
|
-
/// case (#err(msg)) { Debug.print("Failed to create user with the error: " # msg) };
|
|
21
|
-
/// }
|
|
22
|
-
/// ```
|
|
23
|
-
public type Result<Ok, Err> = {
|
|
24
|
-
#ok : Ok;
|
|
25
|
-
#err : Err;
|
|
26
|
-
};
|
|
27
|
-
|
|
28
|
-
// Compares two Result's for equality.
|
|
29
|
-
public func equal<Ok, Err>(
|
|
30
|
-
eqOk : (Ok, Ok) -> Bool,
|
|
31
|
-
eqErr : (Err, Err) -> Bool,
|
|
32
|
-
r1 : Result<Ok, Err>,
|
|
33
|
-
r2 : Result<Ok, Err>
|
|
34
|
-
) : Bool {
|
|
35
|
-
switch (r1, r2) {
|
|
36
|
-
case (#ok(ok1), #ok(ok2)) {
|
|
37
|
-
eqOk(ok1, ok2)
|
|
38
|
-
};
|
|
39
|
-
case (#err(err1), #err(err2)) {
|
|
40
|
-
eqErr(err1, err2);
|
|
41
|
-
};
|
|
42
|
-
case _ { false };
|
|
43
|
-
};
|
|
44
|
-
};
|
|
45
|
-
|
|
46
|
-
// Compares two Results. `#ok` is larger than `#err`. This ordering is
|
|
47
|
-
// arbitrary, but it lets you for example use Results as keys in ordered maps.
|
|
48
|
-
public func compare<Ok, Err>(
|
|
49
|
-
compareOk : (Ok, Ok) -> Order.Order,
|
|
50
|
-
compareErr : (Err, Err) -> Order.Order,
|
|
51
|
-
r1 : Result<Ok, Err>,
|
|
52
|
-
r2 : Result<Ok, Err>
|
|
53
|
-
) : Order.Order {
|
|
54
|
-
switch (r1, r2) {
|
|
55
|
-
case (#ok(ok1), #ok(ok2)) {
|
|
56
|
-
compareOk(ok1, ok2)
|
|
57
|
-
};
|
|
58
|
-
case (#err(err1), #err(err2)) {
|
|
59
|
-
compareErr(err1, err2)
|
|
60
|
-
};
|
|
61
|
-
case (#ok(_), _) { #greater };
|
|
62
|
-
case (#err(_), _) { #less };
|
|
63
|
-
};
|
|
64
|
-
};
|
|
65
|
-
|
|
66
|
-
/// Allows sequencing of `Result` values and functions that return
|
|
67
|
-
/// `Result`'s themselves.
|
|
68
|
-
/// ```motoko
|
|
69
|
-
/// import Result "mo:base/Result";
|
|
70
|
-
/// type Result<T,E> = Result.Result<T, E>;
|
|
71
|
-
/// func largerThan10(x : Nat) : Result<Nat, Text> =
|
|
72
|
-
/// if (x > 10) { #ok(x) } else { #err("Not larger than 10.") };
|
|
73
|
-
///
|
|
74
|
-
/// func smallerThan20(x : Nat) : Result<Nat, Text> =
|
|
75
|
-
/// if (x < 20) { #ok(x) } else { #err("Not smaller than 20.") };
|
|
76
|
-
///
|
|
77
|
-
/// func between10And20(x : Nat) : Result<Nat, Text> =
|
|
78
|
-
/// Result.chain(largerThan10(x), smallerThan20);
|
|
79
|
-
///
|
|
80
|
-
/// assert(between10And20(15) == #ok(15));
|
|
81
|
-
/// assert(between10And20(9) == #err("Not larger than 10."));
|
|
82
|
-
/// assert(between10And20(21) == #err("Not smaller than 20."));
|
|
83
|
-
/// ```
|
|
84
|
-
public func chain<R1, R2, Error>(
|
|
85
|
-
x : Result<R1, Error>,
|
|
86
|
-
y : R1 -> Result<R2, Error>
|
|
87
|
-
) : Result<R2, Error> {
|
|
88
|
-
switch x {
|
|
89
|
-
case (#err(e)) { #err(e) };
|
|
90
|
-
case (#ok(r)) { y(r) };
|
|
91
|
-
}
|
|
92
|
-
};
|
|
93
|
-
|
|
94
|
-
/// Flattens a nested Result.
|
|
95
|
-
///
|
|
96
|
-
/// ```motoko
|
|
97
|
-
/// import Result "mo:base/Result";
|
|
98
|
-
/// assert(Result.flatten<Nat, Text>(#ok(#ok(10))) == #ok(10));
|
|
99
|
-
/// assert(Result.flatten<Nat, Text>(#err("Wrong")) == #err("Wrong"));
|
|
100
|
-
/// assert(Result.flatten<Nat, Text>(#ok(#err("Wrong"))) == #err("Wrong"));
|
|
101
|
-
/// ```
|
|
102
|
-
public func flatten<Ok, Error>(
|
|
103
|
-
result : Result<Result<Ok, Error>, Error>
|
|
104
|
-
) : Result<Ok, Error> {
|
|
105
|
-
switch result {
|
|
106
|
-
case (#ok(ok)) { ok };
|
|
107
|
-
case (#err(err)) { #err(err) };
|
|
108
|
-
}
|
|
109
|
-
};
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
/// Maps the `Ok` type/value, leaving any `Error` type/value unchanged.
|
|
113
|
-
public func mapOk<Ok1, Ok2, Error>(
|
|
114
|
-
x : Result<Ok1, Error>,
|
|
115
|
-
f : Ok1 -> Ok2
|
|
116
|
-
) : Result<Ok2, Error> {
|
|
117
|
-
switch x {
|
|
118
|
-
case (#err(e)) { #err(e) };
|
|
119
|
-
case (#ok(r)) { #ok(f(r)) };
|
|
120
|
-
}
|
|
121
|
-
};
|
|
122
|
-
|
|
123
|
-
/// Maps the `Err` type/value, leaving any `Ok` type/value unchanged.
|
|
124
|
-
public func mapErr<Ok, Error1, Error2>(
|
|
125
|
-
x : Result<Ok, Error1>,
|
|
126
|
-
f : Error1 -> Error2
|
|
127
|
-
) : Result<Ok, Error2> {
|
|
128
|
-
switch x {
|
|
129
|
-
case (#err(e)) { #err (f(e)) };
|
|
130
|
-
case (#ok(r)) { #ok(r) };
|
|
131
|
-
}
|
|
132
|
-
};
|
|
133
|
-
|
|
134
|
-
/// Create a result from an option, including an error value to handle the `null` case.
|
|
135
|
-
/// ```motoko
|
|
136
|
-
/// import Result "mo:base/Result";
|
|
137
|
-
/// assert(Result.fromOption(?42, "err") == #ok(42));
|
|
138
|
-
/// assert(Result.fromOption(null, "err") == #err("err"));
|
|
139
|
-
/// ```
|
|
140
|
-
public func fromOption<R, E>(x : ?R, err : E) : Result<R, E> {
|
|
141
|
-
switch x {
|
|
142
|
-
case (?x) { #ok(x) };
|
|
143
|
-
case null { #err(err) };
|
|
144
|
-
}
|
|
145
|
-
};
|
|
146
|
-
|
|
147
|
-
/// Create an option from a result, turning all #err into `null`.
|
|
148
|
-
/// ```motoko
|
|
149
|
-
/// import Result "mo:base/Result";
|
|
150
|
-
/// assert(Result.toOption(#ok(42)) == ?42);
|
|
151
|
-
/// assert(Result.toOption(#err("err")) == null);
|
|
152
|
-
/// ```
|
|
153
|
-
public func toOption<R, E>(r : Result<R, E>) : ?R {
|
|
154
|
-
switch r {
|
|
155
|
-
case (#ok(x)) { ?x };
|
|
156
|
-
case (#err(_)) { null };
|
|
157
|
-
}
|
|
158
|
-
};
|
|
159
|
-
|
|
160
|
-
/// Applies a function to a successful value, but discards the result. Use
|
|
161
|
-
/// `iterate` if you're only interested in the side effect `f` produces.
|
|
162
|
-
///
|
|
163
|
-
/// ```motoko
|
|
164
|
-
/// import Result "mo:base/Result";
|
|
165
|
-
/// var counter : Nat = 0;
|
|
166
|
-
/// Result.iterate<Nat, Text>(#ok(5), func (x : Nat) { counter += x });
|
|
167
|
-
/// assert(counter == 5);
|
|
168
|
-
/// Result.iterate<Nat, Text>(#err("Wrong"), func (x : Nat) { counter += x });
|
|
169
|
-
/// assert(counter == 5);
|
|
170
|
-
/// ```
|
|
171
|
-
public func iterate<Ok, Err>(res : Result<Ok, Err>, f : Ok -> ()) {
|
|
172
|
-
switch res {
|
|
173
|
-
case (#ok(ok)) { f(ok) };
|
|
174
|
-
case _ {};
|
|
175
|
-
}
|
|
176
|
-
};
|
|
177
|
-
|
|
178
|
-
// Whether this Result is an `#ok`
|
|
179
|
-
public func isOk(r : Result<Any, Any>) : Bool {
|
|
180
|
-
switch r {
|
|
181
|
-
case (#ok(_)) { true };
|
|
182
|
-
case (#err(_)) { false };
|
|
183
|
-
}
|
|
184
|
-
};
|
|
185
|
-
|
|
186
|
-
// Whether this Result is an `#err`
|
|
187
|
-
public func isErr(r : Result<Any, Any>) : Bool {
|
|
188
|
-
switch r {
|
|
189
|
-
case (#ok(_)) { false };
|
|
190
|
-
case (#err(_)) { true };
|
|
191
|
-
}
|
|
192
|
-
};
|
|
193
|
-
|
|
194
|
-
/// Asserts that its argument is an `#ok` result, traps otherwise.
|
|
195
|
-
public func assertOk(r : Result<Any,Any>) {
|
|
196
|
-
switch(r) {
|
|
197
|
-
case (#err(_)) { assert false };
|
|
198
|
-
case (#ok(_)) {};
|
|
199
|
-
}
|
|
200
|
-
};
|
|
201
|
-
|
|
202
|
-
/// Asserts that its argument is an `#err` result, traps otherwise.
|
|
203
|
-
public func assertErr(r : Result<Any,Any>) {
|
|
204
|
-
switch(r) {
|
|
205
|
-
case (#err(_)) {};
|
|
206
|
-
case (#ok(_)) assert false;
|
|
207
|
-
}
|
|
208
|
-
};
|
|
209
|
-
|
|
210
|
-
}
|
|
@@ -1,40 +0,0 @@
|
|
|
1
|
-
/// Stack collection (LIFO discipline).
|
|
2
|
-
///
|
|
3
|
-
/// Minimal LIFO (last in first out) implementation, as a class.
|
|
4
|
-
/// See library `Deque` for mixed LIFO/FIFO behavior.
|
|
5
|
-
///
|
|
6
|
-
import List "List";
|
|
7
|
-
|
|
8
|
-
module {
|
|
9
|
-
|
|
10
|
-
public class Stack<T>() {
|
|
11
|
-
|
|
12
|
-
var stack : List.List<T> = List.nil<T>();
|
|
13
|
-
|
|
14
|
-
/// Push an element on the top of the stack.
|
|
15
|
-
public func push(x:T) {
|
|
16
|
-
stack := ?(x, stack)
|
|
17
|
-
};
|
|
18
|
-
|
|
19
|
-
/// True when the stack is empty.
|
|
20
|
-
public func isEmpty() : Bool {
|
|
21
|
-
List.isNil<T>(stack)
|
|
22
|
-
};
|
|
23
|
-
|
|
24
|
-
/// Return and retain the top element, or return null.
|
|
25
|
-
public func peek() : ?T {
|
|
26
|
-
switch stack {
|
|
27
|
-
case null { null };
|
|
28
|
-
case (?(h, t)) { ?h };
|
|
29
|
-
}
|
|
30
|
-
};
|
|
31
|
-
|
|
32
|
-
/// Remove and return the top element, or return null.
|
|
33
|
-
public func pop() : ?T {
|
|
34
|
-
switch stack {
|
|
35
|
-
case null { null };
|
|
36
|
-
case (?(h, t)) { stack := t; ?h };
|
|
37
|
-
}
|
|
38
|
-
};
|
|
39
|
-
};
|
|
40
|
-
}
|