- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我最近升级到Cabal 3.2(和GHC 8.10),遇到了一些重大问题,这些问题使我的某些项目无法再构建...
问题的详尽描述
这是每次都会失败的最小(非)工作配置:
~/.cabal
);原因将在后面的文章中介绍。我运行cabal update
来重新创建.cabal
目录,并确保Cabal在工作。 test1
创建一个项目(我们称之为cabal init
)。这是一个库项目,带有一个公开的模块(通常称为Test1
),该模块导出一些伪函数foo
。我先运行cabal build
,然后运行cabal install --lib
;一切运行顺利,到目前为止一切顺利。 :m Test1
加载我之前创建的模块,它可以正常工作!我可以输入foo ...
并查看我的函数已执行。另外,我列出了~/.cabal/store/ghc-8.10.xxx
的内容,并看到test1-xxx
目录在其中。 test2
创建一个新项目cabal init
。这次,我将其配置为可执行文件,并添加test1
作为依赖项(使用build-depends
字段)。但是这一次,当我运行cabal build
时,我遇到了一些问题:~/projects/haskell/test2> cabal build
Resolving dependencies...
cabal: Could not resolve dependencies:
[__0] trying: test2-0.1.0.0 (user goal)
[__1] unknown package: test1 (dependency of test2)
[__1] fail (backjumping, conflict set: test1, test2)
After searching the rest of the dependency tree exhaustively, these were the
goals I've had most trouble fulfilling: test2, test1
test1
软件包,但是我可以从GHCi(和GHC)访问它,它存在于
~/.cabal/store
中。
test3
。这是一个库,除了base
以外,它什么都不依赖(因此特别是它不依赖于test1
)。该库公开了一个模块Test3
,其中导出了一个函数bar
。我运行cabal build
,这里没有问题。但是,当我想使用test3
安装cabal install --lib
时,我遇到了一些错误:~/projects/haskell/test3> cabal install --lib
Wrote tarball sdist to
/home/<user>/projects/haskell/test3/dist-newstyle/sdist/test3-0.1.0.0.tar.gz
Resolving dependencies...
cabal: Could not resolve dependencies:
[__0] unknown package: test1 (user goal)
[__0] fail (backjumping, conflict set: test1)
After searching the rest of the dependency tree exhaustively, these were the
goals I've had most trouble fulfilling: test1
test1
;可能这是
test2
构建失败的残余物,不过...
:m Test3
,但是GHCi告诉我它找不到模块Test3
(甚至暗示这是一个错字,我的意思是Test1
),表明test3
确实没有安装,尽管它已成功构建... cabal init
创建一个新项目,称为test4
,这是一个可执行文件,(再次)除了base
以外,都不依赖任何其他内容。我保留了默认的Main.hs
(只显示“Hello,Haskell!”)。我运行cabal build
:没问题。然后我运行cabal install
并...没问题吗?我在随机位置运行test4
,它会启动可执行文件,并显示“Hello,Haskell!”在终端... cabal install xxx --lib
,其中xxx
是Hackage上可用的库程序包(例如xml
),以及:~> cabal install xml --lib
Resolving dependencies...
cabal: Could not resolve dependencies:
[__0] unknown package: test1 (user goal)
[__0] fail (backjumping, conflict set: test1)
After searching the rest of the dependency tree exhaustively, these were the
goals I've had most trouble fulfilling: test1
.cabal
的原因...现在,我似乎处于某种陈旧状态,无法再安装任何库。
*.cabal
文件,它们几乎是由
cabal init
生成的文件,除了在库的情况下我将
executable xxx
切换为
library
之外,我只是添加了
exposed-modules
字段以公开用于库的模块(因此
Test1
分别是
test1
和
Test3
的
test3
)。我还使用
build-depends
中的
test2
来使项目依赖于
test1
。除此之外,它们几乎保持不变。
cabal new-build
和
cabal new-install
的信息,但似乎至少对
cabal build
和
cabal install
没什么作用,至少就我而言。我也想研究沙箱,但自Cabal版本2起,它似乎消失了。
最佳答案
GHC环境文件
GHC安装随附a certain number of packages out-of-the box。 base是其中之一,但还有其他,例如text。如果您单独安装GHC(没有缆线或堆栈)并打开ghci,它将使您使用import Data.Text
没问题。
如果您希望GHC或ghci知道文件系统中存在的其他已编译软件包怎么办?您可以使用package databases将GHC指向其他command-line flags,但是还有package environment files的概念。
环境是纯文本文件,其中包含与软件包相关的GHC标志的列表。 ~/.ghc/$ARCH-$OS-$GHCVER/environments/default
可能存在一个全局环境,并且还可能存在仅影响在同一文件夹内调用的GHC和ghci命令的本地环境。 GHC用户指南中介绍了exact rules for search。
cabal install --lib实际做什么?
默认情况下,它会修改全局环境文件,以便GHC和ghci现在可以找到该库。这就是第3点)起作用的原因。该库的实际已编译二进制文件仍然驻留在cabal存储中。
我们还可以创建本地环境文件。例如,cabal install sop-core --lib --package-env .
将在当前文件夹中创建环境文件.ghc.environment.xxx
,当在ghc和ghci中调用该库时,该库将可供ghc和ghci使用。
为什么test1不能用于test2?
现代阴谋论区分local packages and external packages。
build-depends:
的依赖项,其源代码是从软件包存储库中下载的,并且在编译时将其放在cabal存储中,以便其他Cabal项目可以使用它们而无需重新编译。 ./*.cabal
。
cabal --help
的最后一行中给出。
~/.cabal
文件夹?如果删除全局GHC环境文件并重试,会发生什么?
关于haskell - Cabal无法找到本地来源(尚未正确安装)的软件包,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60650929/
我是haskell和cabal的新手,所以我可能缺少一些简单的东西。 我更新了 cabal 安装: sudo cabal install cabal-install Password: Resolvi
这个问题只有yak-shaving尝试排除故障 another problem . 因此,为了诊断我的另一个问题,建议我尝试: cabal unpack base cd base-4.3.1.0 ca
当我安装 vector和: cabal install vector 我收到很多 SpecConstr如果我可以指定 -fspec-constr-count=SOMETHING-HIGHER,限制将消
当我尝试安装目录包时出现以下错误: $ cabal install directory Resolving dependencies... Failed to install directory-1.
我刚刚在运行 Mavericks 10.9 的 Mac 上安装了 Haskell 平台。包含的 cabal 版本 (1.16) 已过时,并提示我运行“cabal update”,然后运行“cabal
我已经在 I:\cabal 和 ghc 文件夹中分别安装了 cabal 和 I:\ghc 文件夹。我之前安装了 Haskell-Platform,但是没有用,我不得不卸载它。但是有一个名为 C:\Us
我已经制作了一个 Cabal 沙箱,并为它安装了一个软件包,但 runhaskell Setup configure提示我刚刚安装的软件包依赖项丢失了。 我验证了包名和版本,没问题。 运行 cabal
我是否需要手动编辑 *.cabal 文件的 build-depends部分添加包作为项目依赖? 或者也许有一种更方便的方法,它不像手动修改构建文件那样容易出错。 考虑我使用的几乎所有包管理器都具有的功
当我做 cabal --version我懂了: cabal-install version 0.14.0 using version 1.14.0 of the Cabal library 那么有什么
我刚刚做了brew install haskell-platform它安装了 Glorious Glasgow Haskell 编译系统,版本 7.6.3 。 $ cabal --version ca
我需要通过 Cabal 安装 Yesod 和依赖项,不幸的是我无法更新 cabal。外壳输出: ...$ sudo cabal install cabal-install Resolving depe
我似乎在 cabal 中的依赖关系图损坏方面遇到了很多问题,我最终尝试遵循 SO 建议转向 cabal-dev,但由于类似的原因,它无法安装。 跳过原始安装尝试的许多页面,以下是当前状态: C:\Us
每次我安装库时,cabal 都会告诉我安装新版本的 cabal-install。尽管我运行了(明显成功)下面列出的过程,但 cabal-install 的版本保持不变。我哪里错了? (我的操作系统是W
当我通过 sudo apt-get 安装 Haskell/GHC+cabal 时我安装了 Cabal 1.16 版。这显然不是最新的版本。我将如何升级到至少 1.18 版?我试着做 sudo apt-
我制作了自己的 cabal 包(我们称之为 package-1),其中包含两个目标,一个库和一个可执行文件。库部分有一个构建依赖列表,而可执行文件有另一个更大的构建依赖列表。 现在我创建了 packa
当我在 vim 中构建一个 cabal 项目时,使用 :set makeprg=cabal\ build :make haskellmode-vim似乎没有找到类型信息。当光标位于 foo 上时执行
我刚刚通过 apt-get 在 Linux Mint 12 上进行了全新的 haskell 平台安装。每次我尝试使用 cabal-install 安装一些 hackage 包时,我都会得到: coul
当我在 vim 中构建一个 cabal 项目时,使用 :set makeprg=cabal\ build :make haskellmode-vim似乎没有找到类型信息。当光标位于 foo 上时执行
我有两个正在开发的软件包,A和 B .包B取决于 A . A是在它自己的沙盒中开发的,B 也有类似的情况。 : A> cabal sandbox init A> cabal install --ena
看来我错过了什么。据我了解cabal sandbox init表示从当前文件夹和所有子文件夹全部 cabal install命令的范围为沙箱。因此,此文件夹之外的所有内容都不在沙箱中。 那么 caba
我是一名优秀的程序员,十分优秀!