Haskell: first attempt at GHC implementation

Seems to work ok and produce the right results
Runs significantly slower than the other implementations, and I'm pretty sure it's the code rather than Haskell itself