-
Notifications
You must be signed in to change notification settings - Fork 2
Expand file tree
/
Copy pathcheck-result.ts
More file actions
58 lines (48 loc) · 1.24 KB
/
check-result.ts
File metadata and controls
58 lines (48 loc) · 1.24 KB
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
import { Result } from "./dist/result.mjs"
class Err1 extends Error {}
class Err2 extends Error {}
class Err3 extends Error {}
class Err4 extends Error {}
const r1: Result<number, Err1> = Result.Ok(42)
// const r2: Result<string, Err2> = Result.Err(new Err2("An error occurred"));
const r2: Result<string, Err2> = Result.Ok("no error")
const r3 = Result.Ok<null, Err3>(null).map((_) => {
return `null`
})
const r4 = Result.Ok<number, Err4>(10).map(async (n) => {
return n * 2
})
const promiseRes = async (): Promise<Result<number, Err4>> => {
console.debug("Running async function")
return Result.Ok<number, Err4>(20)
}
const res1 = await Result.asyncGen(async function* () {
const val1 = yield* r1
const val2 = yield* r2
const val3 = yield* r3
const val4 = yield* r4
const val5 = yield* await promiseRes()
return {
val1,
val2,
val3,
val4,
val5,
}
})
console.log(res1._tag, res1.safeUnwrap())
const res2 = await Result.asyncGenAdapter(async function* ($) {
const val1 = yield* $(r1)
const val2 = yield* $(r2)
const val3 = yield* $(r3)
const val4 = yield* $(r4)
const val5 = yield* $(promiseRes())
return {
val1,
val2,
val3,
val4,
val5,
}
})
console.log(res2._tag, res2.safeUnwrap())