A PL with many features it is elegant if it let you to compose them. But then the semantic become too much complex.
In Dok, we start with a simple PL and then new DSL and features can be added, but they had not to compose:
- whenever possible one use already present features
- whenever possible a new feature is implemented expanding to normal Dok code
- composition of different feautures is not supported by default and it is discouraged, because it can increase too much the complexity of the language
- composability is obtained stratifying functionalities by higher level to low level and/or compiling a feature to a lower level strata
An example can be dok/paper/programming-with-implicit-values, where many features of Koka can be supported by Dok using normal Dok functionalities.