One of the most powerful constructs in Haskell is list comprehensions (for
mathematicians: this term comes from the "Axiom of Comprehension" of
Zermelo-Frankel set theory). Like other functional languages, Haskell builds a lot of
power on top of manipulation of lists. In Haskell, however, it is possible to generate a
list in a compact form that simply states where the list elements come from and what
criteria elements meet. Lists described with list comprehensions must be generated from
other starting lists; but fortunately, Haskell also provides a quick "enumeration" syntax
to specify starting lists.