Spent time today playing with more `F[Unit]` vs. `EitherT[F, Throwable, A]`, for-comprehension juggling for managing purely functional application flow control with logging. Big takeaway? Sometimes you want to want to hand more power to the caller of a function, when you have distinct, expected (perfectly valid!) states, to allow them more control over what to do with the more complex results, and sometimes ADTs are the solution. In an `EitherT`, preserve `Left` as your error channel, the rest comes down to managing the shape of `Right`.