在没有包环境文件的情况下使用 GHC 时,您将能够使用它附带的多个库,例如
containers
和 text
。但是,当您确实有软件包环境时,您只能使用它提到的软件包。有没有一种简单的方法来创建一个环境文件,其中包含所有未公开的包?看起来我可以根据解析 ghc-pkg list -v
的输出来组合一个解决方案,但我希望有一种更优雅的方法。如果这是特定于版本的,那么我正在寻找适用于 GHC 9.8.2 和 Cabal 3.10.3.0 的解决方案。
如果您查看一些
ghc-pkg
子命令和选项,您会发现解析并不太难。下面的 shell 脚本应该可以工作。由于它在每个包上运行 ghc-pkg field
来检查它是公开的还是隐藏的,所以在每次 ghc
调用上使用它太慢了,但它应该可以为每个新的 GHC 版本生成一个静态环境文件:
#!/bin/bash
set -e
echo clear-package-db
echo global-package-db
for p in $(ghc-pkg list --simple-output --show-unit-ids)
do
if [ "$(ghc-pkg --simple-output --unit-id field $p exposed)" = True ]
then
echo package-id $p
fi
done