我是堆栈的忠实粉丝,我已经从我的机器上完全删除了任何独立的cabal和ghc可执行文件(让堆栈在它自己神秘的〜/ .stack /目录中安装它需要的任何东西)....
但是,看起来有些标志在堆栈下无法正常工作.例如,我想使用-ddump-minimal-imports.在cabal这将是
cabal build --ghc-option=-ddump-minimal-imports
Run Code Online (Sandbox Code Playgroud)
明显的翻译是
stack build --ghc-options -ddump-minimal-imports
Run Code Online (Sandbox Code Playgroud)
这运行,但只生成可执行文件(据我所知,至少......也许输出是在神秘的〜/ .stack目录中的某个地方).
有没有办法做到这一点?
上下文:在stack我停止使用hoogle本地之前因为我的索引会以某种方式与已安装的软件包失去同步 如果我没记错的话,我在ghci命令行和cabal沙箱中遇到了不同结果的问题.
我可以利用stack环境管理本地hoogle数据库吗?
随着时间的推移,我开发了一个混乱的系统级Haskell安装,我不知道如何彻底清理.但是在大多数情况下,这并不是很重要,因为我只是使用堆栈来管理每个项目的Haskell配置.但是,由于我的项目要求与我的系统Haskell设置不同,我想知道为Hackage构建和上传包的最佳方法是什么.
具体来说(1)我应该使用
stack exec -- cabal sdist
stack exec -- cabal upload
Run Code Online (Sandbox Code Playgroud)
而不是简单的
cabal sdist
cabal upload
Run Code Online (Sandbox Code Playgroud)
(2)是否有任何理由安装项目版本的cabal(带stack build cabal?)
或者是否有一些更好的基于堆栈的方法来构建和分发到Hackage,而不涉及cabal直接调用?
我正在为Haddock制作一个新的主题,并希望在一些真实的项目中尝试它.如何配置堆栈以使用我的haddock可执行文件?我没有在stack.yaml中看到任何配置选项.我也尝试将新的haddock可执行文件放入我的PATH,但这没有用.
我在防火墙后面有关于从互联网下载软件的严格规则,所以我想知道是否可以一次下载整个堆栈LTS快照并在本地服务器上提供服务,然后我们可以指向堆栈工具.
通过"快照",我将指代所有包的源代码,因为理想情况下我们需要从该本地服务器绘制以构建多个(堆栈支持的)平台(Linux,Windows).
例如,能够转到防火墙内的新机器,然后运行"stack new",然后编辑yaml文件以将其指向具有给定解析器编号的本地堆栈服务器,那么它会表现得很好通常从那时起,除了总是从本地服务器下载包.
编译器怎么样?我知道堆栈也下载了编译器,所以我想这些必须包含在下载的各种平台的快照包中吗?
谢谢
在拾取堆栈作为开始编写非平凡的haskell程序(大于单个文件)的一步之后,我遇到了不知道如何获取堆栈以识别.ini文件等问题.它似乎不适合.cabal或stack.yaml文件中的任何位置.
为了澄清:在运行堆栈构建/安装之后,具有生成的.exe的文件夹没有资源,因此程序崩溃时会出现一堆IO错误(找不到文件).
我一直在编写一个脚本,我希望通过交换来mapM利用我机器中的多个处理器Async.mapConcurrently.
在该实例中没有观察到速度增加,我想验证runghc确实可以使用多个核心.
给定一个文件Foo.hs:
import Control.Concurrent
main = print =<< Control.Concurrent.getNumCapabilities
Run Code Online (Sandbox Code Playgroud)
如果我按如下方式编译文件:
stack ghc -- -threaded Foo.hs
Run Code Online (Sandbox Code Playgroud)
然后运行如下:
./Foo
Run Code Online (Sandbox Code Playgroud)
它返回结果1.这是预期的,因为没有提供RTS选项.运行它如下:
./Foo +RTS -N
Run Code Online (Sandbox Code Playgroud)
返回数字6,因为我的机器中有6个处理器(同意nproc).
但是,当我以"解释模式"运行脚本时,如下所示:
GHCRTS="-N" stack runghc Foo.hs
Run Code Online (Sandbox Code Playgroud)
它会产生以下错误文本:
Running /home/kostmo/.stack/programs/x86_64-linux/ghc-nopie-8.0.2/bin/ghc-pkg --no-user-package-db list --global exited with ExitFailure 1
ghc-pkg: the flag -N requires the program to be built with -threaded
Run Code Online (Sandbox Code Playgroud)
是否有可能利用堆栈"脚本"多个核心?
我正在使用精益定理证明器,我想构建类似堆栈的功能并开始构建库缓存.我不确定的一件事是何时删除缓存中的旧包.我可以认为,如果我安装了两个版本的Lean,比如3.3.0和3.3.1,我可以争辩保留所有适用于这些版本的软件包的所有版本.由于精益语法移动速度很快,因此限制性很强.
另一方面,我可以看到只保留任何给定包的10个版本.这可能是10个最新版本或10个最近请求的版本.
我很想知道在构建stack和相关工具中考虑的一些想法.
更广泛地说,我希望能够将Haskell Stack用作大学班级项目的构建工具。我遇到的主要问题是,当学生尝试使用Haskell堆栈来构建项目时,由于堆栈会在本地安装沙盒GHC编译器和所有库,因此他们很快就会遇到空间配额问题。
我希望能够将标志添加到项目文件中,以便使用系统GHC和库来解决此问题。目前,我们的IT部门正在运行系统GHC部分,但是stack仍在本地安装所有库。
我愿意接受其他解决方案。
我正在克隆以下存储库并stack.yaml通过在末尾添加对进行一项更改:
docker:
enable: true
Run Code Online (Sandbox Code Playgroud)
运行haskoin-core我正在使用的所有测试
stack test haskoin-core:test-haskoin-core
Run Code Online (Sandbox Code Playgroud)
我想做的只是运行一个测试。如果是这样的HSpec(这是不是)我会运行类似:
stack test --test-arguments -m "Network.Haskoin.Network.Units"
Run Code Online (Sandbox Code Playgroud)
现在我可以做的是修改文件haskcoin-core/test/Main.hs并注释掉所有我不想运行的测试。但是你知道 - 应该有一种更简单的方法来运行它,只使用命令行参数。(改变文件系统会影响 Haskell 的整个功能)。
我也愿意以stack ghci某种方式运行它。
我的问题是:如何使用 Stack 和 Haskell Test.Framework 运行单个测试?