Ornaments have been introduced as a way to describe some changes in datatype definitions that preserve their recursive structure, reorganizing, adding, or dropping some pieces of data. After a new data structure has been described as an ornament of an older one, some functions operating on the bare structure can be partially or sometimes totally lifted into functions operating on the ornamented structure. We explore the feasibility and the interest of using ornaments in practice by applying these notions in an ML-like programming language.
Our work on ornaments was first presented presented at the WGP 2014 workshop. We proposed a concrete syntax for defining ornaments of datatypes and the lifting of bare functions to their ornamented counterparts, described the lifting process, and presented several interesting use cases of ornaments. (You may also see the slides.) Examples of source programs from this paper and their elaboration can be found here.