Type checking in Haskell is probably the worst experience of my life