Functional solution to problem 7