Debug
Debugging in chain is difficult, thus some functions are provided to help.
flow
Inject an inspector with inject.
WARNING
Do not modify data, or subsequent steps will be affected.
typescript
const inspector = <T>(args: { ok: true; data: T } | { ok: false; err: string }) => {
console.log(args)
}
const userInfo = (await flow(ok(userId), andThen(queryUserInfo), inject(inspector), errThen(notify))).unwrap()Output result of each step with log.
typescript
flow(ok(userId), log('INFO'), andThen(queryUserInfo), errThen(notify))pipe
Inject an inspector with tap.
Apply an inspector to each item with peek.
WARNING
Do not modify the arguments of tap and peek.
typescript
pipe(
[1, 2, 3, 4],
map((v) => v + 1),
tap((result) => console.log(result)), // log an iterator
peek((item) => console.log(item)), // log 2, 3, 4, 5
reduce((a, b) => a + b)
)