Last August, I wrote a series of posts outlining my ideas and plans for my then-upcoming programming language 1SubML. Now that I’ve finally released 1SubML, I decided to look back at how my original plans compare to what I actually ended up implementing.
In 2020, I released Cubiml, a language based on Algebraic Subtyping, and earlier this year, I followed it up with PolySubML, extending it with polymorphic types. No sooner had I released PolySubML then I started planning the design of my next programming language, which would have all the features I wanted to add but didn’t have time for with PolySubML.
In 2020, I released Cubiml , showing how to combine full type inference with structural subtyping in an ML-like language, and earlier this year, I followed it up with PolySubML , extending it with higher rank types and existential types among other features. For my next language (which I’ll call X here, since I haven’t chosen a name yet), I set the ambitious goal of supporting all of OCaml’s most…
Ever since Stephen Dolan’s 2016 thesis Algebraic Subtyping showed how to combine type inference and subtyping, I’ve been developing increasingly sophisticated programming languages based on those ideas, first IntercalScript in 2019, then CubiML in 2020, PolySubML in 2025, and with my next language already in the planning stages.
Programming languages typically support two different features for abbreviating complex types - type aliases and newtypes. However, type aliases lead to poor error messages and slow compile times, which is why I chose not to support them in my recently released language, PolySubML. In this post, I will explain the problems with type aliases and provacatively suggest that new languages should only…