The philosophy and history of Haskell