[RWHaskell p179]
[RWHaskell p195]