Get rid of hidden modules
I'm writing a Haskell script to automate logging into my university's authentication system. This problem lends itself to web scraping. Just request an HTTPS page, fill in the forms with username and password, and click submit.
The Shpider package is a wrapper around the popular C scraping library Curl. While the author went to some effort to Haskellize the many technical options one can supply to a Curl operation, he put all the constructors for the options in a hidden module.
How does this impact a Shpider app? It means the app can't do ordinary things like specify a useragent string or set a connection timeout. Each of these is important: Until the app logs the user into the university portal, he cannot access the Internet. But the app needs to access the Internet to verify the login portal's SSL certificate. Shpider has an option for this, but the option's constructor is only available as a hidden module in the Shpider package.
I could go on about the need to circumvent artificial permissions, but here the developer isn't even using them correctly.
CurlUserAgent exists, but it's worthless unless it's exposed to code in outer modules.
Please consider dropping support for hidden modules. Coders write around them anyway, because they need to, because they're an inconvenience.