1

我正在尝试安装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 安装的)?

4

1 回答 1

4

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

因此,推荐的方法是始终在需要的地方提及依赖项。对于任何严重的事情,您将在项目中使用.cabal(或 hpack)文件;对于较小的单文件内容,您可以将它们制作成Stack scripts

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

于 2020-10-24T23:39:50.340 回答