Something like that might be the domain of stack-run. That said, I wouldn't mind having something like stack run, or something similar to yesod devel built into stack. It'd particularly be great if it could optionally run in the interpreter, so that you get blazing fast reloads of the app.
ghcid is used to automatically quickly recompile your project by loading it in GHCi. I find that this normally gets recompilation times quicker than just using stack --build --file-watch.
The argument to --test is a Haskell function within your codebase that is run every time all the code compiles correctly. Generally, it should have the type IO (). Since I often work on web apps, it can be used to re-run your web application after every recompilation cycle. This works quite well.
The --warnings flag is used to force the defaultMain function to be run even if there are GHC warnings as a result of recompiling everything.