In set theory there is a convenient notation for defining new sets, called set comprehension. For example when we have a set we can define a collection of singleton sets with elements from the set as . Sometimes vertical bar is used instead of the colon, and in Isabelle/ZF a single dot is used (something like parses successfully in Isabelle/ZF). In some programming languages a similar notation is used for lists. For example in Python one can write
[ [x] for x in [1,2,3] ]
to get a list of singleton lists and in Haskell
[ [x] | x <- [1,2,3] ]
gives the same.
Erlang also has a syntax for list comprehension, very similar to Haskell’s:
[ [X] || X <- [1,2,3] ]
X <- [1,2,3] above is called the generator expression.
Erlang has also something unique (as far as I know): binary comprehensions. This is a concept similar to the list comprehensions, but the dummy variable bound by the notation (x in the examples above) can range over binaries rather than lists. I found this very convenient when I was implementing Erlang interface to the KDB+ IPC protocol.