what *typed* languages have the best support for defining and working with multiple variations of an AST type, transforming between them, writing pattern-matching code for them in a DRY way, etc
e.g. "take this function Expr -> Int and adapt it to Expr `Without` ExprLam inputs"
23
7
41


