Cache primitives with Task semantics for composable error handling.
The core abstraction is Cache, which wraps a CacheAdapter with typed errors and Task-based operations. Use createInMemory for testing or implement CacheAdapter for your cache backend.