#Debugging
When debugging complex pipelines, you need to see what's happening at each step. The inspect and inspectError functions let you peek at values without affecting the flow.
#inspect - Peek at Success Values
inspect runs a side effect function on success values but always returns the original result unchanged:
import { import Result Result } from '@praha/byethrow';
const const result: Result.Result<number, never> result = import Result Result .const pipe: <Result.Result<42, never>, Result.Result<42, never>, Result.Result<number, never>>(a: Result.Result<42, never>, ab: (a: Result.Result<42, never>) => Result.Result<42, never>, bc: (b: Result.Result<42, never>) => Result.Result<number, never>) => Result.Result<number, never> (+25 overloads) pipe (
import Result Result .const succeed: <42>(value: 42) => Result.Result<42, never> (+1 overload) succeed (42),
import Result Result .const inspect: <Result.Result<42, never>, void>(fn: (a: 42) => void) => (result: Result.Result<42, never>) => Result.Result<42, never> (+1 overload) inspect ((value: 42 value ) => var console: Console console .Console.log(...data: any[]): voidThe console.log() static method outputs a message to the console.
log ('Value:', value: 42 value )),
import Result Result .const map: <Result.Result<42, never>, number>(fn: (a: 42) => number) => (result: Result.Result<42, never>) => Result.Result<number, never> (+1 overload) map ((x: 42 x ) => x: 42 x * 2),
);
// Console: "Value: 42"
// { type: 'Success', value: 84 }On failure, inspect does nothing:
import { import Result Result } from '@praha/byethrow';
const const result: Result.Result<never, "error"> result = import Result Result .const pipe: <Result.Result<never, "error">, Result.Result<never, "error">>(a: Result.Result<never, "error">, ab: (a: Result.Result<never, "error">) => Result.Result<never, "error">) => Result.Result<never, "error"> (+25 overloads) pipe (
import Result Result .const fail: <"error">(error: "error") => Result.Result<never, "error"> (+1 overload) fail ('error'),
import Result Result .const inspect: <Result.Result<never, "error">, void>(fn: (a: never) => void) => (result: Result.Result<never, "error">) => Result.Result<never, "error"> (+1 overload) inspect ((value: never value ) => var console: Console console .Console.log(...data: any[]): voidThe console.log() static method outputs a message to the console.
log ('Value:', value: never value )), // Not called
);
// { type: 'Failure', error: 'error' }#inspectError - Peek at Error Values
inspectError is the counterpart for failure values:
import { import Result Result } from '@praha/byethrow';
const const result: Result.Result<never, "Something went wrong"> result = import Result Result .const pipe: <Result.Result<never, "Something went wrong">, Result.Result<never, "Something went wrong">>(a: Result.Result<never, "Something went wrong">, ab: (a: Result.Result<never, "Something went wrong">) => Result.Result<never, "Something went wrong">) => Result.Result<never, "Something went wrong"> (+25 overloads) pipe (
import Result Result .const fail: <"Something went wrong">(error: "Something went wrong") => Result.Result<never, "Something went wrong"> (+1 overload) fail ('Something went wrong'),
import Result Result .const inspectError: <Result.Result<never, "Something went wrong">, void>(fn: (a: "Something went wrong") => void) => (result: Result.Result<never, "Something went wrong">) => Result.Result<never, "Something went wrong"> (+1 overload) inspectError ((error: "Something went wrong" error ) => var console: Console console .Console.error(...data: any[]): voidThe console.error() static method outputs a message to the console at the "error" log level. The message is only displayed to the user if the console is configured to display error output. In most cases, the log level is configured within the console UI. The message may be formatted as an error, with red colors and call stack information.
error ('Error:', error: "Something went wrong" error )),
);
// Console: "Error: Something went wrong"
// { type: 'Failure', error: 'Something went wrong' }On success, inspectError does nothing:
import { import Result Result } from '@praha/byethrow';
const const result: Result.Result<42, never> result = import Result Result .const pipe: <Result.Result<42, never>, Result.Result<42, never>>(a: Result.Result<42, never>, ab: (a: Result.Result<42, never>) => Result.Result<42, never>) => Result.Result<42, never> (+25 overloads) pipe (
import Result Result .const succeed: <42>(value: 42) => Result.Result<42, never> (+1 overload) succeed (42),
import Result Result .const inspectError: <Result.Result<42, never>, void>(fn: (a: never) => void) => (result: Result.Result<42, never>) => Result.Result<42, never> (+1 overload) inspectError ((error: never error ) => var console: Console console .Console.error(...data: any[]): voidThe console.error() static method outputs a message to the console at the "error" log level. The message is only displayed to the user if the console is configured to display error output. In most cases, the log level is configured within the console UI. The message may be formatted as an error, with red colors and call stack information.
error ('Error:', error: never error )), // Not called
);
// { type: 'Success', value: 42 }#Example: Trace the Pipeline
import { import Result Result } from '@praha/byethrow';
const const processData: (input: Input) => Result.Result<Saved, "ValidateFailed" | "TransformFailed" | "SaveFailed"> processData = (input: Input input : type Input = {
data: string;
}
Input ) => {
return import Result Result .const pipe: <Result.Result<Input, never>, Result.Result<Input, never>, Result.Result<Input, "ValidateFailed">, Result.Result<Input, "ValidateFailed">, Result.Result<Transformed, "ValidateFailed" | "TransformFailed">, Result.Result<Transformed, "ValidateFailed" | "TransformFailed">, Result.Result<Saved, "ValidateFailed" | "TransformFailed" | "SaveFailed">, Result.Result<Saved, "ValidateFailed" | "TransformFailed" | "SaveFailed">, Result.Result<...>>(a: Result.Result<...>, ab: (a: Result.Result<...>) => Result.Result<...>, bc: (b: Result.Result<...>) => Result.Result<...>, cd: (c: Result.Result<...>) => Result.Result<...>, de: (d: Result.Result<...>) => Result.Result<...>, ef: (e: Result.Result<...>) => Result.Result<...>, fg: (f: Result.Result<...>) => Result.Result<...>, gh: (g: Result.Result<...>) => Result.Result<...>, hi: (h: Result.Result<...>) => Result.Result<...>) => Result.Result<...> (+25 overloads) pipe (
import Result Result .const succeed: <Input>(value: Input) => Result.Result<Input, never> (+1 overload) succeed (input: Input input ),
import Result Result .const inspect: <Result.Result<Input, never>, void>(fn: (a: Input) => void) => (result: Result.Result<Input, never>) => Result.Result<Input, never> (+1 overload) inspect ((value: Input value ) => var console: Console console .Console.log(...data: any[]): voidThe console.log() static method outputs a message to the console.
log ('Input:', value: Input value )),
import Result Result .const andThrough: <Result.Result<Input, never>, Result.Result<Input, "ValidateFailed">>(fn: (a: Input) => Result.Result<Input, "ValidateFailed">) => (result: Result.Result<Input, never>) => Result.Result<Input, "ValidateFailed"> (+1 overload) andThrough (const validate: (input: Input) => Result.Result<Input, "ValidateFailed"> validate ),
import Result Result .const inspect: <Result.Result<Input, "ValidateFailed">, void>(fn: (a: Input) => void) => (result: Result.Result<Input, "ValidateFailed">) => Result.Result<Input, "ValidateFailed"> (+1 overload) inspect ((value: Input value ) => var console: Console console .Console.log(...data: any[]): voidThe console.log() static method outputs a message to the console.
log ('After validation:', value: Input value )),
import Result Result .const andThen: <Result.Result<Input, "ValidateFailed">, Result.Result<Transformed, "TransformFailed">>(fn: (a: Input) => Result.Result<Transformed, "TransformFailed">) => (result: Result.Result<Input, "ValidateFailed">) => Result.Result<Transformed, "ValidateFailed" | "TransformFailed"> (+1 overload) andThen (const transform: (input: Input) => Result.Result<Transformed, "TransformFailed"> transform ),
import Result Result .const inspect: <Result.Result<Transformed, "ValidateFailed" | "TransformFailed">, void>(fn: (a: Transformed) => void) => (result: Result.Result<Transformed, "ValidateFailed" | "TransformFailed">) => Result.Result<Transformed, "ValidateFailed" | "TransformFailed"> (+1 overload) inspect ((value: Transformed value ) => var console: Console console .Console.log(...data: any[]): voidThe console.log() static method outputs a message to the console.
log ('After transform:', value: Transformed value )),
import Result Result .const andThen: <Result.Result<Transformed, "ValidateFailed" | "TransformFailed">, Result.Result<Saved, "SaveFailed">>(fn: (a: Transformed) => Result.Result<Saved, "SaveFailed">) => (result: Result.Result<Transformed, "ValidateFailed" | "TransformFailed">) => Result.Result<Saved, "ValidateFailed" | "TransformFailed" | "SaveFailed"> (+1 overload) andThen (const save: (input: Transformed) => Result.Result<Saved, "SaveFailed"> save ),
import Result Result .const inspect: <Result.Result<Saved, "ValidateFailed" | "TransformFailed" | "SaveFailed">, void>(fn: (a: Saved) => void) => (result: Result.Result<Saved, "ValidateFailed" | "TransformFailed" | "SaveFailed">) => Result.Result<Saved, "ValidateFailed" | "TransformFailed" | "SaveFailed"> (+1 overload) inspect ((value: Saved value ) => var console: Console console .Console.log(...data: any[]): voidThe console.log() static method outputs a message to the console.
log ('After save:', value: Saved value )),
import Result Result .const inspectError: <Result.Result<Saved, "ValidateFailed" | "TransformFailed" | "SaveFailed">, void>(fn: (a: "ValidateFailed" | "TransformFailed" | "SaveFailed") => void) => (result: Result.Result<Saved, "ValidateFailed" | "TransformFailed" | "SaveFailed">) => Result.Result<Saved, "ValidateFailed" | "TransformFailed" | "SaveFailed"> (+1 overload) inspectError ((error: "ValidateFailed" | "TransformFailed" | "SaveFailed" error ) => var console: Console console .Console.error(...data: any[]): voidThe console.error() static method outputs a message to the console at the "error" log level. The message is only displayed to the user if the console is configured to display error output. In most cases, the log level is configured within the console UI. The message may be formatted as an error, with red colors and call stack information.
error ('Pipeline failed:', error: "ValidateFailed" | "TransformFailed" | "SaveFailed" error )),
);
};#References
| Function | Purpose |
|---|---|
| inspect(fn) | Run a side effect on the success value |
| inspectError(fn) | Run a side effect on the error value |
