Separating shape and content

From HaskellWiki

An interesting programming technique in Haskell is to encode a data structure as two separate structures, one defining the shape of the overall data, and the other defining the content.

This is used, for one, in nested data parallelism, to distribute nested arrays as flat arrays + a shape descriptor across a network.

Ross Paterson has written a nice overview of the technique.