Effect
https://gyazo.com/4c816dbea0a8d2e516dc2294405a014a
サンプル
code:vanilla.ts
const divide = (a: number, b: number): number => {
if (b === 0) {
throw new Error("Cannot divide by zero")
}
return a / b
}
一般的な例外が発生する実装だが関数のインターフェースからは例外が発生することが分かりづらい
code:effect.ts
import { Effect } from "effect"
const divide = (
a: number,
b: number
): Effect.Effect<number, Error, never> =>
b === 0
? Effect.fail(new Error("Cannot divide by zero"))
: Effect.succeed(a / b)
Effectを使った実装で、戻り値がEffectによるタプルで表現されている
正常な場合 numberを 異常な場合 Error を応答する
実行するために必要な依存関係は never で表現されており外部に依存しない
関連