Formally, everything has to be effect free; furthermore, everything has to be strict (the potential for any value to be &quot;bottom&quot; breaks things).<p>You can apply the same intuition and things mostly work, but there can be a few surprises.<p>These theorems are a huge part of the &quot;if it compiles it must be correct&quot; feeling that functional programming often provides.