Another DSL for pictures? Seems fishy. But hold fast as we chart a course to an especially expressive embedded DSL for the domain of slide presentations with sophisticated animations. Our DSL programs interact with the host language in two ways: by allowing pictures and animations to be built using host-language functions (resembling a shallow embedding), and by allowing host-language reflection on their construction (resembling a deep embedding). As a result, users can conveniently inspect, adjust, and reassemble animations that are written using their own animation combinators. To demonstrate our DSL’s expressive power, we show how it supports a Keynote-like Magic Move operation.

Having made the DSL shipshape, we dive into a lesson learned about deep and shallow DSL design. While deep and shallow may seem like mutually exclusive options, we argue they are actually points on an entire spectrum of possible DSL designs. More importantly, our paper demonstrates that points on the spectrum between deep and shallow are where DSL designs achieve full sail.