• English
  • 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[]): void

    The console.log() static method outputs a message to the console.

    MDN Reference

    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[]): void

    The console.log() static method outputs a message to the console.

    MDN Reference

    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[]): void

    The 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.

    MDN Reference

    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[]): void

    The 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.

    MDN Reference

    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[]): void

    The console.log() static method outputs a message to the console.

    MDN Reference

    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[]): void

    The console.log() static method outputs a message to the console.

    MDN Reference

    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[]): void

    The console.log() static method outputs a message to the console.

    MDN Reference

    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[]): void

    The console.log() static method outputs a message to the console.

    MDN Reference

    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[]): void

    The 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.

    MDN Reference

    error
    ('Pipeline failed:',
    error: "ValidateFailed" | "TransformFailed" | "SaveFailed"
    error
    )),
    ); };

    References

    FunctionPurpose
    inspect(fn)Run a side effect on the success value
    inspectError(fn)Run a side effect on the error value