Low-pain, high-gain multicore programming in Haskell: coordinating irregular symbolic computations on multicore architectures