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 todo: - dynamically typed values: have 'Any' or 'Top' 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)