done: - primitives - structures: list, product, sum, ... can compose structures, e.g., create list of list of product of sum of ... set and dictionary implemented as purely functional red-black tree keys allowed: (anything with total ordering) - primitive values - structural values - dynamically typed values - types - generic types and type unification (inferencing) - recursive types - dynamic typing (value + type) - projectional editor (hosted at https://deemz.org/public/dope2) todo: - simpler encoding of product/sum and struct/enum - mutually recursive types - turn AST type for lambda calculus expressions from projectional editor into explicit DOPE type - to support sets of slots, need comparison of slots => comparison of values => problem: how to compare transformed values? their inputs can come from different types (a) tedious: put in every value: - the type - a comparison function for that type then first compare types, if types match, compare values. could generalize this by writing a compare function on 'typed' values. (b) dirty: use 'magic' function that compares any JS value - interfaces (type classes)