I wouldn't really trust a Haskell programmer to be able to identify a hack. There are a lot of platitudes here whirling around a central point: Frameworks are more restrictive than libraries. But, omgwtf, that's exactly the point of frameworks - they enforce convention in exchange for faster development. Also, newsflash, any large software project is going to have its own conventions. Okay, so, if you're still follow…
Building your own "framework" from a good collection of libraries tends to not have this problem. Also, if it does have that problem (this library is getting in my way) you can usually more easily exchange the library for a different one.
Note that developers tend to disagree on the definition of framework. When I say framework i'm saying something like Rails or Django that is a big monolithic thing that your application is built upon.