first commit, lazy generators, currying, etc