Here :- can be read as 'cons', forming a stack of values. For example,
nil pushes [] onto the stack; or, in the backward direction, tries to
remove [] from the stack. Representing constructor-destructor pairs as
stack manipulators allows them to be composed more easily.