About cats-effect-resource
A Scala skill focused on managing disposable values with Cats Effect Resource. It helps developers compose acquisition and release safely, keep handles within their lifecycle scope, and build services through resource factories.
Key features
- 01Manage lifecycles with Resource
- 02Compose resources into services
- 03Keep acquired handles within use scopes
- 04Wrap Java AutoCloseable values
- 05Use blocking and interruptible operations appropriately
Use cases
- 01Managing database or socket lifecycles
- 02Building services from dependent resources
- 03Releasing resources safely on cancellation
- 04Setting up lifecycle-scoped test fixtures
Install
Copy the command and run it in a terminal.
$
npx skills add https:/ / github.com/ alexandru/ skills --skill cats-effect-resourceAfter installing, type/cats-effect-resourcein Claude Code to confirm it loaded.
Bundled filesreferences/resource.mdscripts/verify-examples.scala
Details
From the project READMECats Effect Resource (Scala)
Quick start
- Model every owned disposable value with
Resource.make,Resource.makeCase, orResource.fromAutoCloseable. - Never return an acquired handle from
.use; it is released when.usecompletes. Return only values computed inside the scope. - Classes must not allocate owned resources in constructors, fields, or top-level vals. Use companion/factory methods returning
Resource[F, Service], then pass acquired private dependencies into constructors. - Wrap Java
AutoCloseablevalues withResource.fromAutoCloseable(Sync[F].blocking(...))orIO.blocking(...). - Compose resources with
flatMap,mapN,parMapN, or helper constructors; exposeResource[F, A]from lifecycle-owning APIs. - Read
references/resource.mdfor patterns, best practices, and type-checked samples.
Workflow
- Identify every value that needs disposal or lifecycle shutdown.
- Move acquisition and release into a
Resource[F, A]; suspend side effects inF(Sync[F].delay/blocking,IO.blocking, etc.). - Build classes from already-acquired constructor parameters; put construction in
resource/createfactories that returnResource. - Compose lower-level resources into higher-level resources before
.use. - Run with
.useat the lifecycle boundary (IOApp, server startup, test fixture), and keep raw handles inside the use scope. - Use
allocatedonly for interop that truly needs separate acquire/release, and guarantee the finalizer is called exactly once.
Usage guidance
- Prefer
Resourceovertry/finallyorbracketwhen composition and cancelation safety matter. - Use
IO.blocking(orSync[F].blocking) for acquisition and release when calling blocking JVM APIs. - Prefer
IO.interruptible/Sync[F].interruptiblefor blocking use-phase operations inside.use. - Use
Resource.evalonly for effects that do not own a finalizer; it is not a substitute for resource acquisition. useacquires a fresh resource each time. If the same handle must be shared for multiple operations, do those operations inside one.use.- For background fibers, use
Resource,.background, orSupervisorto ensure cleanup on cancelation. - When adding or changing Scala examples, update and compile the bundled
scripts/verify-examples.scalascript.
References
- Load
references/resource.mdfor API details, patterns, and examples; the representative check isscripts/verify-examples.scala. - For Kotlin/Arrow parallels, see the
arrow-resourceskill. - Install this skill with
npx skills add https://github.com/alexandru/skills --skill cats-effect-resource.
Comments
Markdown supported