How to circumvent return type polymorphism using GADTs in Haskell | Hacker News Reader