I like F# and believe the author has done an amazing job evolving a functional language on the dot net platform but there are simply too many design choices in F# geared around C# compatibility and limitations of CLR being an object oriented language that when you switch to a different compilation target, these language aspects begin to look like bizarre warts.
While this post primarily compares Reason and TypeScript, much of what is outlined about TypeScript equally applies to flow as well.
This post outlines a container based development workflow using Vagrant and Docker.
Many common docker tutorials (eg. the official node tutorial) suggest a workflow where projects source is copied onto the image, which is then built and run through docker. This approach is not really practical for clojure development as normal clojure programming leans heavily on rapid prototyping and REPL driven development.
The setup below utilizes Vagrant and docker volumes to setup a development environment which ensures reproducibility and container isolation while retaining the short feedback cycle which clojure developers take pride in.
Predictability and Side-effects
Redux advertises itself as a predictable state container.
This predictability comes at a cost: Your actions that are supposed to manipulate the state of your application are processed synchronously through pure functions called reducers. You should not have side-effects in your reducers.