Nice post, thanks for putting it up. I ended up with the same frustration and moved to Clojure to enjoy some more flexibility, which I don’t regret. I still love Haskell and consider getting back to it at a certain point, to try to solve these issues. Haskell is a powerful language, but it takes a lot of time to get these things right. For now, for my pet project, dynamic types work like a charm. Have you considered giving a shot to Clojure?