TL;DR
引数をまとめて渡す書き方と、部分適用(カリー化)する書き方の両方に対応した API。Effect の多くの API がこの形になっている。
なぜ必要か
pipe の中で使うとき、部分適用の形で書けるとコードが短くなる。たとえば次のコードは、
fetchRequest.pipe((fetchRequestEffect) => Effect.flatMap(fetchRequestEffect, jsonResponse))次のように書き換えられる。
const main = fetchRequest.pipe(Effect.flatMap(jsonResponse))仕組み
Effect.flatMap の定義を簡略化すると、2 つのシグネチャを持つ。
export declare const flatMap: {
<A, B>(f: (a: A) => Effect<B>): (self: Effect<A>) => Effect<B>
<A, B>(self: Effect<A>, f: (a: A) => Effect<B>): Effect<B>
}1 つ目は関数だけを受け取り、Effect を待つ関数を返す。2 つ目は Effect と関数をまとめて受け取る。
例
引数をまとめて渡す場合。
const main = pipe(fetchRequest, (fetchRequestEffect) =>
Effect.flatMap(fetchRequestEffect, jsonResponse),
)部分適用する場合。
const main = pipe(fetchRequest, (fetchRequestEffect) =>
Effect.flatMap(jsonResponse)(fetchRequestEffect),
)