major refactor (again)

back to using records. No Expr<'a>s