IO & Logging Capabilities

Using newtypes and type classes, we create a wrapper around IO with support for logging capabilities. This approach keeps log entries as values, enables log aggregation, and supports diagnostic contexts, while also making logging easily testable. For dispatching logs, any preferred library can be used.

Refined Configurations

There’s a great little Scala library, PureConfig, for avoiding boilerplate when loading configurations. I still see a lot of people using Lightbend Config and manually writing deserializers for each field – a tedious, error-prone process which rarely sees any testing efforts.