Skip to content

Instantly share code, notes, and snippets.

@nagyadam2092
Created July 3, 2025 12:04
Show Gist options
  • Save nagyadam2092/3c70fbc76cfc276d1aa49c7134c78704 to your computer and use it in GitHub Desktop.
Save nagyadam2092/3c70fbc76cfc276d1aa49c7134c78704 to your computer and use it in GitHub Desktop.
Feature fp-ts (Task/TaskEither) Effect
Async primitive Task<A> = () => Promise<A> (lazy) Effect<Out, Err, Req> (runnable via runPromise, etc.)
Error channel TaskEither<E, A> = () => Promise<Either<E, A>> Dedicated error channel in Effect<Out, Err, Req>
Exception wrapping tryCatch wraps thrown/rejected Promises into Left<E> Effect.try / Effect.tryPromise wrap sync/async functions
Composition pipe, chain, map, fold on TaskEither .pipe(Effect.map, Effect.chain, Effect.catchAll, …)
Concurrency No built-in fibers; manual via Promise.all First-class fibers with safe cancellation (Effect.fork)
Retry / Backoff No built-in support; manual retries Schedule library offers retry policies out of the box
Resource safety (bracketing) Manual try/finally around Task or TaskEither Effect.acquireRelease / Effect.bracket for cleanup
Dependency injection & layers None (custom Context needed) Built-in Context and Layer modules
Bundle size Very small; type-level constructs, tree-shakeable Larger core runtime plus optional modules; tree-shakeable
Learning curve Steep for HKTs and FP type classes Steeper initial investment, but consistent for large systems
@nagyadam2092
Copy link
Author

@nagyadam2092
Copy link
Author

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment