模块适用于Cabal,但不适用于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最近也不再使用它了。)这有一个很好的理由:依靠“在某些时候我键入了此命令”很快会导致维护问题,并且一旦尝试,重复的工作就会再次找出依赖项在另一台计算机上运行代码。

因此,推荐的方法是始终在需要的地方提及依赖项。对于任何严重的问题,您都可以在项目中使用 steps { dsl { text('''job ("\$DISPLAY_NAME") { wrappers { preBuildCleanup { preBuildCleanup() } } steps { shell("make fclean") shell("make") shell("make test") shell("make clean") } } (或hpack)文件。对于较小的一文件式文件,您只需将其设置为Stack scripts

如果您根本没有任何文件,那么……首先,您可能要考虑获取文件 now ...,但是您也可以使用{{3 }},即.cabal将被默认使用。
最后,您也可以直接在命令行中提及依赖项:stack ghci
我真的不建议这样做,除非您真的只是在快速尝试一些东西。>

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...