This post is part of the F# Advent Calendar in English 2016. Please also checkout the other posts or the F# Advent Calendar 2016 eBook.
Pure code intermingled with impure code.
This is not a very good separation of concerns and has many other disadvantages.
Here is an example of how many programs look like:
In Haskell e.g. this would not be possible. But how should we deal with this in an impure programming language that does not enforce side effects to be made explicit, like F# e.g.?
There are a few approaches that will be presented in this post, one of which is the free monad pattern.
We will also examine a proof of concept implementation of a Tic-Tac-Toe backend following the command query responsibility segregation pattern (CQRS) together with event sourcing (ES).
See how you can implement a program in F# that is entirely pure and free from any effects and side effects!
Continue reading →