Read DSLEval mixin, and see why it's this way now. Still feels pretty opaque but not sure moving the eval out is worth it.