3
votes

I would like to always use the "-Wall -Werror" options when building with stack (executing stack build) but adding these flags to ghc-options in package.yaml does nothing. I would also like to avoid passing the --pedantic flag to stack build. Here's the config files:

package.yaml

...
executables:
  XYZ-exe:
    main:                Main.hs
    source-dirs:         app
    ghc-options:
    - -Wall
    - -Werror
    - -threaded
    - -rtsopts
    - -with-rtsopts=-N
    dependencies:
    - XYZ
...

XYZ.cabal

...
executable XYZ-exe
  main-is: Main.hs
  hs-source-dirs:
      app
  ghc-options: -Wall -Werror -threaded -rtsopts -with-rtsopts=-N
...

The "-Wall -Werror" flags are specified in ghc-options but as-if ignored when building. This is the output for stack build:

stack build
Building all executables for `XYZ' once. After a successful build of all of 
them, only specified executables will be rebuilt.
XYZ-0.1.0.0: configure (lib + exe)
Configuring XYZ-0.1.0.0...
XYZ-0.1.0.0: build (lib + exe)
Preprocessing library for XYZ-0.1.0.0..
Building library for XYZ-0.1.0.0..
[  1 of 105] Compiling Data.List.Extras ( src\Data\List\Extras.hs, .stack- 
work\dist\e626a42b\build\Data\List\Extras.o )
... the rest is omitted, all succeed ...

And here's the output for stack build --pedantic

stack build --pedantic
Building all executables for `HStat' once. After a successful build of all of them, only specified executables will be rebuilt.
HStat-0.1.0.0: configure (lib + exe)
Configuring HStat-0.1.0.0...
HStat-0.1.0.0: build (lib + exe)
Preprocessing library for HStat-0.1.0.0..
Building library for HStat-0.1.0.0..
[  1 of 105] Compiling Data.List.Extras ( src\Data\List\Extras.hs, .stack-work\dist\e626a42b\build\Data\List\Extras.o )

src\Data\List\Extras.hs:4:1: error: [-Wunused-imports, -Werror=unused-imports]
    The import of ‘Data.Maybe’ is redundant
      except perhaps to import instances from ‘Data.Maybe’
    To import instances alone, use: import Data.Maybe()
  |
4 | import           Data.Maybe
  | ^^^^^^^^^^^^^^^^^^^^^^^^^^^

This works as expected - src\Data\List\Extras.hs indeed does have an unused Data.Maybe import. What am I doing wrong?

1
I can't reproduce this issue. I just created a fresh stack project (stack new foo), added -Wall -Werror as you did to the executable section in package.yaml, removed a signature to trigger a warning in app/Main.hs, then stack build gave an error, as expected. Can you show the commands you ran and the resulting output? - Li-yao Xia
I will be able to show yhe output in an hour or so. For the time being, the command I ran was s simple stack build (that just happily compiled even though there were unused imports, shadowing... . However, running stack build --pedantic worked as expected - it showed the unused imports and other warnings. - Petras Purlys
BTW, Which Stack version are you using ? - Sibi
Can you post your entire package.yaml ? - Sibi
Thanks @Sibi, while doing that I've noticed that it's possible do define ghc-options for the library part as well. Doing that solved the issue. - Petras Purlys

1 Answers

2
votes

The ghc-options flags had to be separately defined in the library part of package.yaml:

library:
  source-dirs: src
  ghc-options:
  - -Wall
  - -Werror
  - -fwarn-incomplete-uni-patterns

Doing that solved the issue.