There are a number of data specification libraries for Clojure. The best-known ones are Schema and clojure.spec. Then there’s Malli, designed by my colleagues at Metosin. The libraries are used in two ways. They’re used for specifying the shape of data inside the program, for example the parameter and return types of a function. They’re also used for specifying the external interfaces of the program, for example what kind of JSON a REST API endpoint accepts. I’ll call these use cases ...