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 はエラー処理しないほうがよい。

関連

出典