ch 5, ex 6
ch 5, ex 6, ex7 (partially - filter doesn't work lazily)