The sequence: Duality of data and calculation
What makes the F# sequence so ambient and versatile is its dual nature. Being a strongly typed generic data collection, it exposes the contained data via two archetypal .NET interfaces of the System.Collections.Generic
namespace, namely IEnumerable<T>
(https://msdn.microsoft.com/en-us/library/9eekhta0(v=vs.110).aspx) and IEnumerator<T>
(https://msdn.microsoft.com/en-us/library/78dfe2yb(v=vs.110).aspx).
These interfaces personify the classic data pull protocol, where a data consumer actively pulls data from the producer. Indeed, the type of seq<'T>
in the F# is defined as the following abbreviation:
type seq<'T> = System.Collections.Generic.IEnumerable<'T>
The preceding line of code means in practice that each F# sequence is a data collection, which can be traversed by getting an enumerator that allows you to stir through the sequence from its head towards its tail, obtaining the values of its elements. The enumerator...