Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
Help us understand the problem. What is going on with this article?

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

要約

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も外部パッケージを見つけられるようだ。

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away