© 2026 Hedgehog Software, LLC
import { Effect, Schema, Data } from 'effect' import { HttpClient, HttpClientRequest, HttpClientResponse } from '@effect/platform'; import { NodeHttpClient } from '@effect/platform-node'; const TodoResponseSchema = Schema.Struct({ userId: Schema.Int, id: Schema.Int, title: Schema.String, completed: Schema.Boolean, }) class UnknownError extends Data.TaggedError('UnknownError')<{}> {} const program = Effect.gen(function* () { const client = yield* HttpClient.HttpClient const response = HttpClientRequest.get('https://jsonplaceholder.typicode.com/todos/1').pipe( HttpClientRequest.acceptJson, client.execute, Effect.flatMap(HttpClientResponse.matchStatus({ 200: HttpClientResponse.schemaBodyJson(TodoResponseSchema), orElse: () => Effect.fail(new UnknownError()), })), ) console.log(response) // response has type Effect.Effect<{ ... }, unknown, never> }) const runnable = program.pipe( Effect.provide(NodeHttpClient.layer) ) Effect.runPromise(runnable).catch(console.error)
console.log
200: HttpClientResponse.schemaBodyJson(TodoResponseSchema),