Library/API design has a lot to do with choosing the right "look and feel" of the language. This includes the individual words as well as the flow of the language, describing how to form valid and complete statements. Let's refer to this as the "concrete syntax" of the library/API (or in general, the domain specific language) to be developed.
When implementing such a library for a mainstream GPL, say Java or C++, you as a language designer do not typically have that much freedom concerning the concrete syntax (which is basically fixed by the parser for the language). Although there are notable exceptions including Scala, Haskell, Lisp, and C#, it is still relatively challenging to mix and combine very different styles of concrete syntax in the same editor.
The language workbench MPS from JetBrains is, in this respect, a true game changer as the environment is not parser-based but rather uses a projective editor that can mix and combine different concrete syntaxes in a very flexible manner.
Check out, e.g., mbeddr to see what is possible with MPS.
Why is this interesting and relevant? Being able to design your concrete syntax has the potential to enable a productive environment for developing code that is very readable for a certain target audience. Most programmers would agree that readable code typically means maintainable code (and we spend most of our time debugging, tweaking, and extending).
In this seminar topic, you'll suggest a re-design of the model analysis library developed and used in the lecture FMDE, which has been implemented completely in Java and is available on GitHub. A lot of the elegance and beauty of the constructions are obliterated by the fixed syntax and structure enforced by Java. A completely separate language is, however, also undesirable as the library is meant to be mixed seamlessly with "normal" Java code. MPS should be able to open up new and exciting possibilities, including mixing textual, tabular, and visual fragments in the same concrete syntax!
Slides from February 6, 2017