We searched an effect monad to replace scala.concurrent.Future and move our tech stack away from 'Scala as better Java'.
The requirements for the replacement were:
- Battle-tested & documented;
- Type-safe;
- Fiber-safe (not leaking concurrent resources).
ZIO was picked for the following reasons:
ZLayers (with zio-magic) that enabled us to structure the application & do DI in a functional way;
- Typed error channel for safer handling of business-logic exceptions;
- Built-in
Scheduler and retries / cancellation;
- Steeper learning curve when compared to cats-effect.