I have started doing something like this in the last year and it has been nothing but great
everything is modular, dependency injection if anything is needed, shared-almost-nothing
I have started doing something like this in the last year and it has been nothing but great
everything is modular, dependency injection if anything is needed, shared-almost-nothing
haskell also teaches you another important lesson: most of your program can be pure functions that do not mutate anything, they purely transform data from input A to output B. A program is simply a machine that is mapping and reducing data over some time.
For side effects, like reading from db/files or writing to a socket, you can do this in a small impure layer at the top your program. This layer just builds values so that they can be passed through the pure machinery.
The pure code can’t really crash due to total pattern matching, so it is nice for super robust programs.