• 日本語
  • Result をデバッグする

    複雑なパイプラインをデバッグする際、各ステップで何が起こっているかを確認する必要があります。 inspectinspectError 関数を使うと、フローに影響を与えずに値を確認できます。

    inspect - 成功値の確認

    inspect は成功値に対して副作用関数を実行しますが、常に元の結果を変更せずに返します。

    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),
    ); // コンソール: "Value: 42" // { type: 'Success', value: 84 }

    失敗時、inspect は何もしません。

    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
    )), // 呼ばれない
    ); // { type: 'Failure', error: 'error' }

    inspectError - 失敗値の確認

    inspectError は失敗値に対して副作用関数を実行しますが、常に元の結果を変更せずに返します。

    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
    )),
    ); // コンソール: "Error: Something went wrong" // { type: 'Failure', error: 'Something went wrong' }

    成功時、inspectError は何もしません。

    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
    )), // 呼ばれない
    ); // { type: 'Success', value: 42 }

    例:パイプラインのトレース

    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
    )),
    ); };

    リファレンス

    関数目的
    inspect(fn)成功値に対して副作用を実行する
    inspectError(fn)エラー値に対して副作用を実行する