
"Neil Mitchell"
The good and bad of each are as follows:
1) Move alex.exe into some global Haskell directory for binaries (which is on the PATH) Not too bad, but while names might not clash, if too Cabal programs both have LICENSE in their same directory, and both read it, things go wrong. The whole issue is that name uniqueness goes.
The .exe should get installed in a different location than something like a README, right?
2) Make an alex.bat in some global Haskell binary directory (on the PATH) Again, quite workable. There are a few disadvantages, the app isn't real, so certain things don't always work exactly like they should - for example Ctrl-C will ask "do you want to terminate the batch file" - not just kill Alex.
3) Make Cabal detect wherever it puts alex, so it can then use it. Good, and at a very minimum, Cabal should detect where it put something. It could even keep an installed tools database, if it felt the need. The disadvantage is you then can't invoke Alex/Haddock etc at the command line, which is useful to have.
Executables that cabal installs shouldn't just be available to cabal, though! Haskell is good for stuff besides building Haskell ;) peace, isaac