Understanding the exact properties that disqualify a data type from being an instance of a given abstraction turns out to be surprisingly helpful
Abstractions such as functor, monads... are often explained by example, which I think is only half of what's needed to build a solid intuition. The other half is counter-examples: things that *aren't* things. This talk intends to fill that void, by going through the list of common abstractions and showing types that are, say, a functor, but not an applicative. While this may sound more like a toy than something useful, understanding the exact properties that disqualify a data type from being an instance of a given abstraction turns out to be surprisingly helpful, and have certainly allowed me to go further in my study of such things.
How Libretto, a Scala DSL for concurrent programming, can be used for writing custom stream operators
I'll share a handful of techniques that can help you avoid runtime errors and shift them to the realm of compile time
We will look into three less-understood, yet (arguably) extremely useful constructs introduced in Cats Effect 3: Dispatcher, Supervisor, IOLocal