cats-effect-io
8
总安装量
4
周安装量
#35515
全站排名
安装命令
npx skills add https://github.com/alexandru/skills --skill cats-effect-io
Agent 安装分布
claude-code
4
opencode
3
github-copilot
3
codex
2
amp
1
kimi-cli
1
Skill 文档
Cats Effect IO (Scala)
Quick start
- Treat every side effect as an effect value: return
IO[A],SyncIO[A], orF[A]withF[_]: Sync/Async/Temporalas needed. - Wrap Java blocking calls with
IO.blockingorIO.interruptible(orSync[F].blocking/interruptible). - Use
Resourceto acquire/release resources andIOAppfor program entry points. - Prefer structured concurrency (
parTraverse,parMapN,background,Supervisor) over manual fiber management. - Read
references/cats-effect-io.mdfor concepts, recipes, and FAQ guidance. - For deeper
Resourceguidance, use thecats-effect-resourceskill (install:npx skills add https://github.com/alexandru/skills --skill cats-effect-resource).
Workflow
- Classify side effects and choose the effect type:
IOdirectly or polymorphicF[_]with the smallest required Cats Effect typeclass (Sync,Async,Temporal,Concurrent). - Wrap side-effectful code using
IO(...),IO.blocking,IO.interruptible, orIO.async(or theirSync/Asyncequivalents). - Manage resources with
Resourceorbracketand keep acquisition/release inside effects. - Compose effects with
flatMap/for-comprehensions and collection combinators (traverse,parTraverse). - Use concurrency primitives (
Ref,Deferred,Queue,Semaphore,Supervisor) and structured concurrency to avoid fiber leaks.
Side-effect rules (apply to IO, SyncIO, and to F[_]: Sync/Async)
- All side-effectful functions must return results wrapped in
IO(orF[_]with Cats Effect typeclasses). - Side-effects include all non-determinism (call sites are not referentially transparent):
- Any I/O (files, sockets, console, databases).
Instant.now(),Random.nextInt().- Any read from shared mutable state (the read itself is the side effect).
- Returning mutable data structures (for example,
Array[Int]).
Blocking I/O rules
- Java blocking methods must be wrapped in
IO.blockingorIO.interruptible(orSync[F].blocking/interruptible) so they run on the blocking pool. - Prefer
IO.interruptiblefor methods that may throwInterruptedExceptionorIOException, but not for resource disposal. - Use
IO.blockingfor cleanup/disposal (Closeable#close,AutoCloseable#close).
Output expectations
- Make side effects explicit in signatures (
IO/SyncIOorF[_]: Sync/Async); the guidance here applies equally to concreteIOand polymorphicF[_]. - Use the smallest typeclass constraint that supports the needed operations.
- Keep effects as values; do not execute effects in constructors or top-level vals.
References
- Load
references/cats-effect-io.mdfor documentation summary and patterns. - For concrete samples, read
references/cats-effect-io.md. - Use the
cats-effect-resourceskill for Resource-specific workflows and patterns (install:npx skills add https://github.com/alexandru/skills --skill cats-effect-resource).