TL;DR
Effect の中心となる型 Effect<A, E, R>。副作用を値のように扱えるようにする。
仕組み
Effect<A, E, R> の 3 つの型パラメータは、それぞれ次の型を表す。
A: 成功したときの型E: 失敗したときの型R: 依存するコンテキストの型(Effect Service を参照)
Effect は「プログラムが何をするか」を表すだけで、作っただけでは実行されない。実行するには run* 系の関数を明示的に呼ぶ。通常の同期処理なら Effect.runSync、非同期処理なら Effect.runPromise を使う。
例
Effect は値なので、配列に入れたり、関数の引数として渡したりできる。
const print = Console.log("Hello")
const printingArray = [print, print, print]
const printIfTrue = (check: boolean, toPrint: Effect.Effect<void>) => {
if (check) Effect.runSync(toPrint)
}