I just noticed that it appears flag parsing happens before executing
.ghci. And sure enough, looking at the source, GHCi.UI.runGHCi
executes the dot files, which is definitely after all the dynflags
parsing stuff in Main.
This means that if your .ghci has a -Wall, you can't turn off warnings
from the command line. You have to prepend ":set " to the flags and
make a local ./.ghci, or pass -ghci-script.
I assume this has how it's already been, and I'm surprised it's taken
me this long to notice this! Is there a good reason to do it this
way, or is it just the way it's always been and no one complained?
It's surprising to me because I think most programs do it the other
way. E.g. when you start your shell, settings on the command line
will override your .zshrc or whatever. zsh for one doesn't seem to
clearly document this, but experimenting seems to indicate that is so.