TL;DR

第 1 引数の値を第 2 引数の関数に渡し、その結果を第 3 引数の関数に渡す、という処理を順に繰り返す Effect の関数。

なぜ必要か

関数呼び出しを入れ子にすると、ネストが深くなって処理の起点や順番を追いにくい。pipe を使うと、処理を上から順に並べて書けるので読みやすくなる。

例

const main = pipe(fetchRequest, Effect.flatMap(jsonResponse), Effect.flatMap(savePokemon))

Effect 自身も pipe メソッドを持つので、次のようにも書ける。

const main = fetchRequest.pipe(Effect.flatMap(jsonResponse), Effect.flatMap(savePokemon))

Effect.flatMap(jsonResponse) のように引数を 1 つだけ渡せるのは、Effect の API が Dual API になっているためである。

注意点

ステップが増えると、pipe で組み立てたコードも読みにくくなる。そのときは Effect.gen を使う。

関連

出典