TL;DR
第 1 引数の述語関数が false を返したとき、第 2 引数で作ったエラーで元の Effect を失敗させる関数。
仕組み
公式ドキュメントでは、成功チャネルの値を述語で絞り込む演算子として説明している。述語を満たさない値があれば、元の Effect はエラーで失敗する。似た関数に次のものがあり、述語を満たさないときの振る舞いが違う。
Effect.filterOrDie: 元のEffectを異常終了させるEffect.filterOrDieMessage: 異常終了させ、そのときのエラーメッセージを指定できるEffect.filterOrElse: 代わりのEffectを実行する
ユーザー定義の型ガードと組み合わせると、絞り込んだ後の値の型を狭められる。公式ドキュメントの例では、型ガードで User | null を User に絞り込んでいる。用意済みの Predicate.isNotNull も使える。
例
const main = fetchRequest.pipe(
Effect.filterOrFail(
(response) => response.ok,
(): FetchError => ({ _tag: "FetchError" }),
),
)
// ^ const main: Effect.Effect<Response, FetchError, never>response.ok が false なら FetchError で失敗し、それ以外なら Response を成功値として返す。