Our great sponsors
-
WorkOS
The modern identity platform for B2B SaaS. The APIs are flexible and easy-to-use, supporting authentication, user identity, and complex enterprise features like SSO and SCIM provisioning.
-
InfluxDB
Power Real-Time Data Analytics at Scale. Get real-time insights from all types of time series data with InfluxDB. Ingest, query, and analyze billions of data points in real-time with unbounded cardinality.
Frameless is a nice way to grab some type safety back from Spark, and features opt-in Cats integration.
On the frontend, I use my own Laminar with observables that don't care about purity or tracking effects, and no Cats or Futures or anything else.
On the backend, I use http4s with Cats Effect, but I don't think in terms of purity or category theory, I just use IO as a nicer Future.
I agree absolutely. There are cases where using an effects library is the best thing you can do. I've written an object capabilities library in Scala, and it's a much nicer experience to use capabilities with cats-effect than doing it raw.
Akka-stream, zio, and cats-effect all have very simple ways to do this by just passing an Int that specifies the parallelism at the call-site. Akka-stream has mapAsync. ZIO has mapMPar(f:A=%3Ezio.ZIO[R1,E1,B]):zio.stream.ZStream[R1,E1,B]), foreachPar, etc. Cats has parSequenceN and parTraverseN.