TL;DR
Effect が提供する、環境変数を扱うための組み込みの仕組み(Config)。
仕組み
環境変数は Config.string などで定義する。
const PokeApiConfig = Config.string("BASE_URL")定義した Config は、Effect と同じように Effect.gen の中で yield* して使う。
const program = Effect.gen(function* () {
const baseURL = yield* PokeApiConfig
const response = yield* fetchRequest(baseURL)
if (!response.ok) return yield* new FetchError()
const json = yield* jsonResponse(response)
return yield* decodePokemon(json)
})環境変数の読み込みは副作用のある操作で、失敗することもあるので yield* が必要になる。その結果、program のエラーの型(Effect の第 2 型パラメータ)に ConfigError が加わる。
自分の理解
環境変数の読み込みに失敗したら、そのままアプリケーションを止めたい。なので ConfigError はエラー処理しないほうがよい。