使用cabal,我可以使用命令安装hakyll:
cabal install hakyll
Run Code Online (Sandbox Code Playgroud)
如何使用堆栈执行相同的操作?
haskell package-management cabal cabal-install haskell-stack
使用Cabal重新安装软件包时,通常会看到此警告:
警告:请注意,重新安装始终是危险的.无论如何......
这条消息背后的原因是什么?
我遇到了很多问题cabal-install:
1:每次我这样做cabal update,它都会告诉我这样做cabal install cabal-install,所以我这样做,然后当我cabal update再次这样做时,它会说同样的事情.
2:当我尝试ghc-mod从hackage 安装时,它给了我这个错误:
[username@arch ~]$ cabal install ghc-mod
In order, the following will be installed:
haskell-src-exts-1.14.0 (reinstall) changes: pretty-1.1.1.1 -> 1.1.1.0
hlint-1.8.55 (reinstall)
ghc-mod-3.1.4
setup: The program happy version >=1.17 is required but it could not be found.
ghc-mod-3.1.4 depends on haskell-src-exts-1.14.0 which failed to install.
haskell-src-exts-1.14.0 failed during the configure step.
hlint-1.8.55 depends on haskell-src-exts-1.14.0 which failed to install.
Run Code Online (Sandbox Code Playgroud)
所以问题是The program happy version …
我试图做,cabal install hoogle但有haskell-src-exts-1.13.5依赖的hickup :
Configuring haskell-src-exts-1.13.5...
setup: The program happy version >=1.17 is required but it could not be found.
Run Code Online (Sandbox Code Playgroud)
当我尝试这样做cabal install happy似乎成功完成,但cabal-install不保留版本:
>$ cabal list happy
* happy
Synopsis: Happy is a parser generator for Haskell
Default available version: 1.18.10
Installed versions: [ Unknown ]
Homepage: http://www.haskell.org/happy/
License: BSD3
Run Code Online (Sandbox Code Playgroud)
正如您所看到的那样,版本是[ Unknown ].它仍然未知,如果我再试cabal install happy一次,cabal-install仍然无视.
是什么赋予了?
提前致谢!
我的服务器托管限制了1GB内存.当我想编译一些大型程序时git-annex,Cabal吃了很多内存.有没有办法限制cabal或gcl使用某些选项来限制内存使用?
我用一些细节更新了问题:我在Webfaction托管(CentOS 7 - 64bit)上运行cabal(1.22.4.0)和Ghc7.10.2,可以访问shell(非root访问).Webfaction admin/robot通常会因编译而容忍一些爆发.但Ghc/ Cabal需要太多内存并花费太多时间来进行某些包编译.因此系统会自动杀死所有进程.
我需要多次重新启动编译才能最终获得成功的结果.
我的主要目标是编译以成功结束,无论需要多长时间.
清除所有cabal installed包后,我在以下会话中运行:
$ cabal update
Downloading the latest package list from hackage.haskell.org
james@bast:~/.cabal/packages$ cabal install cabal-dev
Resolving dependencies...
Downloading cabal-dev-0.9.1...
[1 of 1] Compiling Main ( /tmp/cabal-dev-0.9.124882/cabal-dev-0.9.1/Setup.hs, /tmp/cabal-dev-0.9.124882/cabal-dev-0.9.1/dist/setup/Main.o )
Linking /tmp/cabal-dev-0.9.124882/cabal-dev-0.9.1/dist/setup/setup ...
Configuring cabal-dev-0.9.1...
Warning: This package indirectly depends on multiple versions of the same
package. This is highly likely to cause a compile failure.
package containers-0.4.2.1 requires array-0.4.0.0
package Cabal-1.14.0 requires array-0.4.0.0
package text-0.11.1.13 requires array-0.4.0.0
package deepseq-1.3.0.0 requires array-0.4.0.0
package containers-0.4.2.1 requires array-0.4.0.0
package HTTP-4000.2.2 requires …Run Code Online (Sandbox Code Playgroud) ~/.cabal/configcabal-install使用的商店配置.我想对它做一些hackery.(具体来说,安装了多个GHC版本,我希望有单独的文档索引).
但是,除了默认文件中包含的内容之外,我无法找到有关其语法或变量的任何文档.有没有可用的文件?
编辑:我已经说明了上面的目标,但是让我添加一些细节:如果在两个版本的GHC中安装了相同的软件包(例如GTK),它们最终会出现在同一个文档索引文件中.对于每个GHC安装,我不希望将本地文档索引分开.我相信在某种程度上可以使用文档目录设置,但是必须有一个当前使用的GHC版本的变量.如果没有,可能会有一些变通方法,但除非我看到文档,否则我无法说出来.
我已经成功创建了一个ghc交叉编译器,它允许我从我的x64 linux机器编译armv6h的haskell代码(在我的例子中是raspberry pi).我已成功在树莓上运行了一个hello world程序.
不,我想构建我真正的应用程序,它对其他haskell模块有很多依赖.当我为x64编译时,我就是这么做的
cabal install dependenciy1 depenency2 ...
Run Code Online (Sandbox Code Playgroud)
我知道我可以让我自己的程序成为一个cabal项目,自动完成这一步.但这不是重点.
当我尝试使用交叉编译器时
arm-unknown-linux-gnueabi-ghc --make myapp.hs
Run Code Online (Sandbox Code Playgroud)
它告诉我它找不到的模块.当然,他们没有安装!
我阅读https://ghc.haskell.org/trac/ghc/wiki/Building/CrossCompiling 并根据我尝试过
cabal --with-ghc=arm-unknown-linux-gnueabi-ghc --with-ghc-pkg=arm-unknown-linux-gnueabi-ghc-pkg --with-ld=arm-unknown-linux-gnueabi-ld install random
Run Code Online (Sandbox Code Playgroud)
随机是我正在尝试安装的依赖性.我收到以下错误:
Resolving dependencies...
Configuring random-1.0.1.3...
Failed to install random-1.0.1.3
Last 10 lines of the build log ( /home/daniel/.cabal/logs/random-1.0.1.3.log ):
/home/daniel/.cabal/setup-exe-cache/setup-Cabal-1.18.1.3-arm-linux-ghc-7.8.3.20140804: /home/daniel/.cabal/setup-exe-cache/setup-Cabal-1.18.1.3-arm-linux-ghc-7.8.3.20140804: cannot execute binary file
cabal: Error: some packages failed to install:
random-1.0.1.3 failed during the configure step. The exception was:
ExitFailure 126
Run Code Online (Sandbox Code Playgroud)
当我做
file /home/daniel/.cabal/setup-exe-cache/setup-Cabal-1.18.1.3-arm-linux-ghc-7.8.3.20140804
Run Code Online (Sandbox Code Playgroud)
我明白了
/home/daniel/.cabal/setup-exe-cache/setup-Cabal-1.18.1.3-arm-linux-ghc-7.8.3.20140804: ELF 32-bit LSB executable, ARM, EABI5 version …Run Code Online (Sandbox Code Playgroud) 所以,这是一个个人问题,但也许人们会有很好的建议或解决方法.
问题是在Debian下安装cabal-install和haskell-platform.
当你apt-get install haskell-platform,它随附cabal-install,它的命令cabal可用.
现在这cabal-install不是最新的:
> which cabal
/usr/bin/cabal
> /usr/bin/cabal --version
cabal-install version 0.8.0
using version 1.8.0.2 of the Cabal library
Run Code Online (Sandbox Code Playgroud)
但是,我对跑步的理解cabal update是它更新了cabal,但由于它不是"Debian thingy",它将它放入~/.cabal/bin/.
> ~/.cabal/bin/cabal --version
cabal-install version 0.8.2
using version 1.8.0.2 of the Cabal library
Run Code Online (Sandbox Code Playgroud)
现在我的系统有2个cabals,而我输入cabal的那个不是我想要使用的那个...因为它会不断更新另一个而不是自己,因此无效.
所以我做的是我把它别名~/.bashrc:
alias cabal='~/.cabal/bin/cabal'
Run Code Online (Sandbox Code Playgroud)
现在:
> cabal --version
cabal-install version 0.8.2
using version 1.8.0.2 of the Cabal library
Run Code Online (Sandbox Code Playgroud)
所以,我最后的问题:
which cabal仍指向我的无用 …(在我开始之前:我将使用Cabal for Everything,其名称中包含Cabal并与Haskell有关.)
有了通常的"你需要更新X来安装Y,但这会打破依赖性Z"问题,前几天,我想我只是问:为什么Cabal不是设计成一个完整的包管理器,特别是以下功能:
你会看到这个列表的去向.现在,对我来说,Cabal感觉就像一个有点复杂的构建系统(当你想第一次开始使用它时,试着找出你的软件包所需的Base版本),这是一个半生不熟的软件包安装程序.
所以问题再次出现:为什么Cabal没有制作全功能的构建/包装系统?我确信有一些设计决定导致当前状态.
(这个问题在某种程度上受到了对Reddit的咆哮的启发,但与那个人相反并不意味着冒犯任何人.):-)
cabal-install ×10
haskell ×10
cabal ×7
ghc ×2
package ×2
debian ×1
dependencies ×1
happy ×1
raspberry-pi ×1