#Result をデバッグする
複雑なパイプラインをデバッグする際、各ステップで何が起こっているかを確認する必要があります。
inspect と inspectError 関数を使うと、フローに影響を与えずに値を確認できます。
#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[]): 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),
);
// コンソール: "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[]): voidThe console.log() static method outputs a message to the console.
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[]): 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 )),
);
// コンソール: "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[]): 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 )), // 呼ばれない
);
// { 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[]): 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 )),
);
};#リファレンス
| 関数 | 目的 |
|---|---|
| inspect(fn) | 成功値に対して副作用を実行する |
| inspectError(fn) | エラー値に対して副作用を実行する |
