The very essence of functional programming relies on a fairly simple premise: write side-effectless programs so that you can reason about them equationally. Side-effects however are predominant in every program that . . . well, does something useful. In light of this, the modelling of effects in functional programs has become a fairly active domain of study. From stacked effects, to horizontal ones; from transformers to free monads and so on. Every effect model, though joyfully they may seem, have some rather unfortunate consequences.