- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
在为您的项目指定外部依赖项时,我最近开始为 Haskell 使用堆栈。有时您将其放在 .cabal 文件中,而有时您将其放在 .yaml 文件中。
我是否认为当你把它放在 cabal 文件中时,它只会在你的包的堆栈存储库中查找。然而,当你把它放在你的 .yaml 文件中时,它也会在 Hackage 服务器中搜索,如果它在任何快照中都找不到它?
最佳答案
您项目的所有依赖项都进入 .cabal
文件。不过,您是对的,有时您还会在 stack.yaml
中列出软件包。文件,这是可以理解的困惑。这是为什么?
好吧,.cabal
文件总是表达你对包的依赖,但是 stack.yaml
文件有效地配置了这些包的来源。通常,当使用 stack
,包来自 Stackage 基于您在 stack.yaml
中指定的解析器文件。然而,Stackage 并不包含 Hackage 中的所有包,并且它不打算——当您需要存在于 Stackage 之外的包时,您必须在 stack.yaml
中指定它们。文件。
为什么是这样?好吧,解析器自动将两个重要信息结合在一起:包名称和包版本。堆栈解析器提供了一个(弱)保证单个解析器中的所有包将一起工作,因此当一个包来自解析器时,无需手动选择您想要的版本。相反,Stackage 将为您做出决定。
从 Hackage 拉包时,您没有这种奢侈,因此您需要使用 extra-deps
指定包及其版本.例如,您可能有这样的事情:
extra-deps:
- crypto-pubkey-openssh-0.2.7
- data-bword-0.1
- data-dword-0.3
.cabal
中指定版本约束。文件,所以为什么要在
stack.yaml
中复制它们?文件?但是,在构建库时,区别更显着:
.cabal
文件表示库的实际版本约束(如果有),但
stack.yaml
文件精确指定在本地开发时实际安装的版本。
stack.yaml
文件的用途类似于
Gemfile.lock
或
npm-shrinkwrap.json
其他包管理器的文件,尽管职责不像
stack
那样明确(部分原因是围绕 Haskell 的包系统如何工作的历史原因以及它过去存在的一些问题)。
关于haskell - stack.yaml 文件和 .cabal 文件的区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38839348/
我是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
我是一名优秀的程序员,十分优秀!