@inproceedings{FirstClassDynamic-Homer2019,
    title = {First-Class Dynamic Types},
    booktitle = {Dynamic Language Symposium},
    year = 2019,
    doi = "10.1145/3359619.3359740",
    url = "https://michael.homer.nz/Publications/DLS2019/pattern-types.pdf",
    author = {Homer, Michael and Jones, Timothy and Noble, James},
    abstract = {
        Since LISP, dynamic languages have supported dynamically-checked type
         annotations. Even in dynamic languages, these annotations are
        typically  static: tests are restricted to checking low-level features
        of objects and  values, such as primitive types or membership of an
        explicit  programmer-defined class.    We propose much more dynamic
        types for dynamic languages — first-class  objects that programmers can
        customise, that can be composed with other  types and depend on
        computed values — and to use these first-class  type-like values *as*
        types. In this way programs can define their own  conceptual models of
        types, extending both the kinds of tests programs can  make via types,
        and the guarantees those tests can provide. Building on a 
        comprehensive pattern-matching system and leveraging standard language
        syntax  lets these types be created, composed, applied, and reused
        straightforwardly,  so programmers can use these truly dynamic
        first-class types to make their  programs easier to read, understand,
        and debug.
    }
}
