Abstract the expression user interface into it's own type and combine with generator