I thank you!
If you feel some parts are particularly hard to understand, please let me know. Perhaps I could reword, add more details or make the Haskell code more easily understandable.