Parallel and Concurrent Programming in Haskell: Techniques for Multicore and Multithreaded Programming