Programming languages providing high-level abstractions can increase programmers' productivity and program safety. Language-oriented programming is a paradigm in which domain-specific languages are developed to solve problems within specific domains with (high-level) abstractions relevant to those domains. However, language development involves complex design and engineering processes. These processes can be simplified by reusing (parts of) existing languages and by offering language-parametric tooling.
In this paper we present \textit{iCoLa}, a meta-language supporting incremental (meta-)programming based on reusable components. In our implementation of \textit{iCoLa}, languages are first-class citizens, providing the full power of the host-language (Haskell) to compose and manipulate languages. We demonstrate \textit{iCoLa} through the construction of the \textit{Imp}, \textit{SIMPLE}, and \textit{MiniJava} languages via the composition and restriction of language fragments and demonstrate the variability of our approach through the construction of several languages using a fixed-set of operators.