Beginning Haskell: A Project-Based Approach