2017-08-20 12 views
2

私は自分のプロジェクトの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.0ghc 8.0.2

+0

'stack --version'のどのバージョンのスタックですか?そして、どのghcですか? – epsilonhalbe

+0

@epsilonhalbe編集をご覧ください。 – smilingbuddha

+0

ある時点で、Cabalは 'ghc --make'コマンドに' -O'を追加することを決めました(これは私のマシンでスタック1.1.3とcabal 1.24.2.0で確認済みです)。ドキュメントの状態になると、アサーションもオフになります。私は実際にはなぜそうは思わない - 多分もっと知識のある人が現れて説明するかもしれない。あなたは '-fno-ignore-asserts'を' ghc-options'(あるいは '-O0'と推測していますが、これはおそらく望ましくない副作用があるでしょう)に追加することで回避できます。 – user2407038

答えて

0

を使用しています。最適化を無効にします(--ghc-options -O0を介して)アサーションを実行できるようにする--fastフラグを渡してみてください。

関連する問題