One of the quite subtle, but quite common, traits of a functional programming language is the availability of features to combine and compose functions into more sophisticated conceptual techniques that also encapsulate some side effects when combining functions. Some of these techniques are known as Monoids and Monads. These two come from the world of a subset of algebra, the category theory. This mathematical foundation gives the inspiration and also powerful concepts when composing and combining functions, including side effects.
For a more gentle introduction and information to Monads in functional programming, you could watch this MSDN Channel 9 interview with Microsoft's developer Brian Beckman:
https://channel9.msdn.com/Shows/Going+Deep/Brian-Beckman-Dont-fear-the-Monads
The best sample of F# computation expression is the asynchronous workflow. The term workflow in asynchronous workflow comes from the fact that it is implemented from...