Effect TS Guide
Overview
Use this skill to teach Effect-TS fundamentals and best practices, then apply them to user code and architecture questions.
Teaching workflow
- •Clarify context: runtime (node/bun/browser), goal (new app, refactor, review), and constraints.
- •Separate core vs shell: identify pure domain logic vs effects and boundaries.
- •Model errors and dependencies: define tagged error types and Context.Tag service interfaces.
- •Compose with Effect: use pipe/Effect.gen, typed errors, and Layer provisioning.
- •Validate inputs at boundaries with @effect/schema before entering core.
- •Explain resource safety: acquireRelease, scoped lifetimes, and clean finalizers.
- •Provide minimal, runnable examples tailored to the user context.
- •If the user asks for version-specific or "latest" details, verify with official docs before answering.
Core practices (short list)
- •Use Effect for all side effects; keep core functions pure and total.
- •Avoid async/await, raw Promise chains, and try/catch in application logic.
- •Use Context.Tag + Layer for dependency injection and testability.
- •Use tagged error unions and Match.exhaustive for total handling.
- •Decode unknown at the boundary with @effect/schema; never leak unknown into core.
- •Use Effect.acquireRelease/Effect.scoped for resource safety.
- •Use @effect/platform services instead of host APIs (fetch, fs, child_process, etc.).
References
- •Read
references/best-practices.mdfor the extended checklist and examples. - •Read
references/platform-map.mdwhen comparing @effect/platform to Node/Bun/Browser APIs.