The singular composite of expressions is not a necessity, but to avoid it you have to give names to all your intermediate states, whereas a typical imperative language reuses the same name repeatedly.Interesting way to put it.
I like to tell people that they program in languages where every type signature is "Any -> IO Any". It's technically true, but it gets some weird looks.