Adding lazy evaluation and monoid homework