One problem though: the current implementation uses byte-code inspection for partial evaluation (i.e. the "bubbling" of constants). Maybe this can be solved by representing such values as an abstract domain. I need a rest to absorb all of this. I think I get the main idea, but the details of what happens at what level, and how different type systems can be used are quite complicated.