模块适用于 Cabal 但不适用于 Stack

Module works with Cabal but not with Stack

我正在尝试安装 sbv 模块 https://hackage.haskell.org/package/sbv

使用 Stack 安装效果很好(没有错误):

stack install sbv

但是我无法在stack ghci中导入相应的模块:

import Data.SBV

-- <no location info>: error:
--     Could not find module ‘Data.SBV’
--     Perhaps you meant Data.Set (from containers-0.6.2.1)

现在,当我尝试使用 Cabal 时:

cabal new-install sbv --lib

ghci

一切顺利
import Data.SBV
prove $ \x -> x `shiftL` 2 .== 4 * (x::SWord8)

--- Q.E.D.      (<-- this is the expected output)

然而,stack ghci 仍然没有运气(与之前相同的错误)。无论 stack install sbv 是在全球还是在 Stack 项目的上下文中完成,都是这种情况。

有没有办法让 sbv 使用 Stack 安装(即使它是通过 cabal 安装的)?

Stack 一直回避 手动安装库 然后可以导入到该计算机上的文件中的想法。 (Cabal 最近也摆脱了这一点。)这有很好的理由:依赖“在某个时候我输入了这个命令”很快会导致维护问题和重复工作,一旦你尝试再次找出依赖关系运行 你的代码在另一台机器上。

因此,推荐的方法是总是在需要的地方提及依赖项。对于任何严肃的事情,您都可以在项目中使用 .cabal(或 hpack)文件;对于较小的 one-file 东西,您可以将它们制作成 Stack scripts.

如果您根本没有任何文件,那么...好吧,首先,您可能需要考虑获取一个文件现在...但您也可以使用Stack global project,这是 stack ghci 默认使用的。
最后,您也可以直接在命令行中提及依赖项:stack ghci --package sbv
我真的不推荐这样做,除非您真的只是想快速尝试一些东西。