Practicing Haskell using infinite sets as a starting point