私は自分のプロジェクトのHaskellビルドシステムとしてStack 9.0を使用しています。Haskellのスタックビルドシステムでコンパイル中にアサーションを有効にする
スタックでHaskellプロジェクトをコンパイルすると、すべてのアサーションがオフになっていることに気付きました。対照的に、コマンドラインで「通常の」GHCビルドを行うと、アサートは、-fignore-asserts
フラグ(link)で明示的にオフにしない限り、デフォルトでオンになります。例えば
は、この単純な主な機能は、アサーションエラー、私はアサーションをオンにするために私のプロジェクトの.cabalファイルを編集するにはどうすればよい
import Control.Exception.Base
main :: IO()
main = assert (1==2) $ print "Hello World!"
を投げることができませんか?現在、私の.cabalファイル内の私は、アサーションが明示的にこのリストの中にオフにされていないので、奇妙で、次のGHCのオプション
ghc-options: -threaded -rtsopts -with-rtsopts=-N
を参照してください。
EDIT:
私はstack --version
を実行した後Version 1.1.2 x86_64 hpack-0.14.0
を持っています。特に、stack lts 9.0
とghc 8.0.2
'stack --version'のどのバージョンのスタックですか?そして、どのghcですか? – epsilonhalbe
@epsilonhalbe編集をご覧ください。 – smilingbuddha
ある時点で、Cabalは 'ghc --make'コマンドに' -O'を追加することを決めました(これは私のマシンでスタック1.1.3とcabal 1.24.2.0で確認済みです)。ドキュメントの状態になると、アサーションもオフになります。私は実際にはなぜそうは思わない - 多分もっと知識のある人が現れて説明するかもしれない。あなたは '-fno-ignore-asserts'を' ghc-options'(あるいは '-O0'と推測していますが、これはおそらく望ましくない副作用があるでしょう)に追加することで回避できます。 – user2407038