cats-effect-resource
Installation
SKILL.md
Cats 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.