I personally don't see having the version in the package address particularly more nasty than specifying it in the project file, as in Maven, which I have been dealing with lately. One problem I imagine is that when migrating to a new version of a library, the address has to be updated in each file the library is used in, with potentially catastrophic consequences if any one file is forgotten. A grep seems wise in that case.
Would you argue that there are more robust solutions in the Haskell ecosystem? What scheme do you prefer?
I don't think the issue was with specifying the version in the package address. It is that you need to use a 3rd party, remote service, to redirect your requests to the appropriate git repo and branch.
This is because Go doesn't support specifying branches/tags itself when specifying a git dependency.
This workaround is contingent on gopkg.in people keeping their service maintained and running. If they went down, all your dependencies would break.
Would you argue that there are more robust solutions in the Haskell ecosystem? What scheme do you prefer?