A refactoring exercise to learn about dependency inversion and hexagonal architecture. Inspired by a blog post from Matteo Vaccari. You can find the original repo here.
I decided to solve the problem in a functional programming style using the Kotlin programming language and Arrow, a functional companion to the Kotlin standard library.
The following resources helped me in designing this solution: