ex. 6.5: elegant double
ex. 6.5: elegant double - small improvement
ex. 6.6: refactor elegant double so it can be used in test for this ex.
ex. 6.6: map2 implemented