Blueprint

From HaskellWiki

The goal of the blueprint technique is to allow reading a data structure like Data.Map while constructing it. The idea is to separate the structure from the contained data. It is discussed at length in