4
0

More than 3 years have passed since last update.

cabal v3でdoctestを使うならwrite-ghc-environment-filesを有効にするといい

Posted at

要約

Haskellのcabal-install v3でNix-style build(v3ではこれがデフォルトのモード)をする場合、doctestを使うパッケージがあるなら以下の設定をcabal.projectや$HOME/.cabal/configに書いておくといい。

write-ghc-environment-files: ghc8.4.4+

参考

何が問題なのか

上記の設定を入れないと、doctestが外部パッケージのDBを参照できなくなり、ghcのコアパッケージ以外のパッケージを参照できなくなる。

例えばdoctestが処理するソースファイルに

import Data.Aeson (FromJSON)

などと書いてあるとdoctestがData.Aesonを見つけられずにエラーになる。(.cabalのbuild-dependsにaesonを書いてもダメ。doctestは.cabalファイルを参照しないらしい)

これ以外にも、例えばCPPを使って外部パッケージのバージョンを参照しようとするとエラーになる。例えば、

{-# LANGUAGE CPP -}

...

#if MIN_VERSION_aeson(1,5,0)
...
#else
...
#endif

などと書くと、MIN_VERSION_aesonを処理できずにエラーになる。

どう解決するか

write-ghc-environment-files設定を有効にすると、ビルド時にプロジェクトディレクトリに.ghc.environment.{architecture}といった名前のファイルが作られる。この中に参照すべきパッケージDBの場所が記録される。これがあればdoctestも外部パッケージを見つけられるようだ。

4
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
0