标签: haskell-stack

如何使用runhaskell增加堆栈大小?

我正在编写一些一次性的Haskell脚本来解决Project Euler的一些问题.我真的不想编译它们,因为我经常要做的改变很多,但在少数情况下我发现我的堆栈空间已经用完了.

说明runhaskell以下语法应该增加堆栈空间的文档:

runhaskell +RTS -K5M -RTS Script.hs
Run Code Online (Sandbox Code Playgroud)

这永远不会有效(在我试过的任何排列中).堆栈大小始终为8,388,608.这令人抓狂,我在Google上找不到多少帮助.

有什么建议?我究竟做错了什么?

haskell haskell-stack

10
推荐指数
1
解决办法
2401
查看次数

如何将"容器"包添加到我的.cabal文件中(在编译时不被堆栈覆盖)?

我正在研究练习Haskell轨道的"罗马数字"任务,并按照他们的指示安装堆栈.我正在使用Fedora 24盒子.

只要我从基地使用Haskell模块,我就没有问题.现在我正在尝试导入Data.Map模块.使用ghci命令行可以正常工作:

$ ghci
GHCi, version 7.8.4: http://www.haskell.org/ghc/  :? for help
Loading package ghc-prim ... linking ... done.
Loading package integer-gmp ... linking ... done.
Loading package base ... linking ... done.
Prelude> import Data.Map
Prelude Data.Map> 
Run Code Online (Sandbox Code Playgroud)

但是,当我尝试使用以下命令从我的src文件中导入它时:

import qualified Data.Map as M (foldlWithKey, fromList)
Run Code Online (Sandbox Code Playgroud)

我尝试运行测试时遇到问题:

$ stack test
roman-numerals-0.0.0: build (lib + test)
Preprocessing library roman-numerals-0.0.0...
[2 of 2] Compiling Roman            (...)
(...) /roman-numerals/src/Roman.hs:3:1: error:
    Failed to load interface for ‘Data.Map’
    It is a member of …
Run Code Online (Sandbox Code Playgroud)

haskell cabal haskell-stack

10
推荐指数
1
解决办法
1075
查看次数

Stack的package.yaml vs stack.yaml

据我所知,Stack至少在这个提交周围支持了hpackpackage.yaml配置文件,但是关于它和文件之间的差异的文档并不多.stack.yaml

我发现谈论它的少数几个链接之一是这个文档,它说:

package.yaml是hpack支持的文件格式.它在cabal上添加了一些细节.例如,hpack具有YAML语法支持,并将自动生成exposed-modules列表.但是,它只是cabal包文件的前端.

因此,它似乎package.yaml提供了*.cabal文件配置能力的超集,就像stack.yaml文件一样.


这里文档暗示stack.yaml是配置文件:

接下来,让我们看看我们的stack.yaml文件,它提供了我们的项目级设置.

... 后来说package.yaml是用于存储依赖项:

要告诉堆栈使用text,您需要将其添加到您的package.yaml文件中 - 特别是在您的依赖项部分...

这个相关的问题,但遗憾的是没有澄清两个文件之间的区别.

我一直在使用package.yaml我所有项目的配置,从不使用stack.yaml.


那么,堆栈package.yamlstack.yaml文件之间的关系是什么?如果/当他们的职责重叠时,哪个更好的做法使用?

haskell haskell-stack

10
推荐指数
1
解决办法
1666
查看次数

如何防止堆栈为每个新项目下载 GHC?

如何防止堆栈为每个新项目下载 GHC?

每次我使用 stack 创建一个新项目然后构建或执行代码时,stack 都会为我安装一个新的 GHC。这不仅是等待这么长时间下载一个巨大的图像(在GFW后面,xKib/s)很无聊,而且对于我可怜的128G SSD Macbook Pro来说也是一场空间灾难。我怎样才能解决这个问题?

$ stack exec blah
Preparing to install GHC to an isolated location.
This will not interfere with any system-level installation.
ghc-8.4.4:   15.98 KiB / 220.05 MiB (  0.01%) downloaded...^C
Run Code Online (Sandbox Code Playgroud)

haskell haskell-stack

10
推荐指数
1
解决办法
1317
查看次数

在 OS X mojave 上安装 Haskell 时出现“macOS_SDK_headers_for_macOS_10.14.pkg 与此版本的 macOS 不兼容”

在运行以下代码块时,

$ cd /Library/Developer/CommandLineTools/Packages/
$ open macOS_SDK_headers_for_macOS_10.14.pkg
Run Code Online (Sandbox Code Playgroud)

安装人员警告

此软件包与此版本的 macOS 不兼容,可能无法安装。

当我选择“无论如何安装”时,它失败了。

我怎么可能让它工作?

一些可能相关的环境版本:
OS: macOS 10.14.5
xcodebuild -version: Xcode 11.2.1
gcc --version: gcc (Homebrew GCC 9.2.0_1) 9.2.0

更大的背景:我正在按照https://docs.haskellstack.org/en/stable/install_and_upgrade/ 上的说明设置 haskellstack

在跑步时$ stack setup我遇到了

配置:错误:在“~/.stack/programs/x86_64-osx/ghc-8.6.5.temp/ghc-8.6.5”中:
配置:错误:C 编译器无法创建可执行文件
有关详细信息,请参阅“config.log”
运行时收到 ExitFailure 77

根据说明的注释部分,我跑了

$ xcode-select --install
Run Code Online (Sandbox Code Playgroud)

它说

xcode-select: 错误:命令行工具已经安装,使用“软件更新”安装更新

然后(按照相同的说明)我跑了

$ cd /Library/Developer/CommandLineTools/Packages/
$ open macOS_SDK_headers_for_macOS_10.14.pkg
Run Code Online (Sandbox Code Playgroud)

xcode haskell-stack macos-mojave

10
推荐指数
1
解决办法
8404
查看次数

Stack (Haskell) 使用 GitHub Actions 构建源文件缓存

使用 本地构建我的 Haskell 项目时stack build,仅重新编译更改的源文件。不幸的是,我无法让 Stack 在 GitHub Actions 上表现得像这样。请问有什么建议吗?

例子

我用Lib.hsand创建了一个简单的例子Fib.hs,我什至检查缓存的 .stack-work 文件夹是否在构建之间更新,但它总是编译两个文件,即使只更改一个文件。

这是示例:

  1. (未使用缓存,同时构建Lib.hsFib.hs+ 依赖项):https : //github.com/MarekSuchanek/stack-test/runs/542163994
  2. (仅Lib.hs更改,同时构建Lib.hsFib.hs):https : //github.com/MarekSuchanek/stack-test/runs/542174351

我可以从日志(详细堆栈)中观察到缓存中的某些内容正在更新,但我完全不清楚是什么以及为什么。它正确地发现只有Lib.hs被改变了:“ stack-test-0.1.0.0: unregistering (local file changes: src/Lib.hs)”所以我不明白为什么所有的都被编译了。我注意到,在2Fib.hi没有更新,.stack-work但其他人(Fib.oFib.dyn_hi,和Fib.dyn_o)是。

笔记

当没有更改源文件时, ~/.stack 缓存是可以的,也可以不构建。当然,这是一个虚拟示例,但我们有不同的项目,其中包含更多源文件,可以显着加快构建速度。当更改非源文件(例如 README 文件)时,不会按预期构建任何内容。

caching haskell cabal haskell-stack github-actions

10
推荐指数
1
解决办法
610
查看次数

如何找到提供导入的库?

我加入了一个项目。代码库对我来说是新的。我对在代码库中使用的模块感兴趣,它是从依赖项导入的。该模块未在项目中定义。

是否有一种自动/简单的方法来确定哪个库提供了我感兴趣的模块?

许多依赖项是专有的,hoogle 无法帮助我解决这个问题。

haskell cabal haskell-stack

10
推荐指数
1
解决办法
138
查看次数

如何将命令行参数传递给堆栈exec

我正在构建一个Haskell程序,该程序使用命令行参数解析器使用option-applicative库.由于我使用堆栈来构建和测试我的项目,我想使用stack exec执行我的程序传递命令行参数,就像

stack exec myprogram-exe -i myfile.txt
Run Code Online (Sandbox Code Playgroud)

但是当我尝试执行时,Stack给了我以下消息:

Usage: stack exec CMD [-- ARGS (e.g. stack ghc -- X.hs -o x)] ([--plain] |
              ([--ghc-package-path] | [--no-ghc-package-path])
              ([--stack-exe] | [--no-stack-exe]) [--package ARG])
Run Code Online (Sandbox Code Playgroud)

有没有办法可以将命令行参数传递给使用Stack执行的程序?

haskell haskell-stack

9
推荐指数
1
解决办法
3583
查看次数

建议使用Stack作为全局包管理器的方法

我想在全局安装一些Haskell库,例如hindent我的编辑器的Haskell集成使用它.建议的方法是什么?

我认为这stack install hindent是正确的方法.但是,我想更新我的包,发现没有办法做到这一点.根据我发现的GitHub问题报告,

stack涉及管理项目的本地构建沙箱.它不打算成为全球包经理.

似乎有一些解决方法,比如在我想要安装的软件包上维护一个带有人为依赖性的虚拟项目.这听起来像一个可怕的黑客,我一直无法找到任何关于应该采取什么方法的官方文件.

使用我的系统软件包管理器(Homebrew)安装Haskell软件包不是一个选项,因为它们没有打包.

我本来会打开一个针对Stack的问题报告,但是贡献指南要求我在标签下提出问题.

haskell haskell-stack

9
推荐指数
1
解决办法
1338
查看次数

我如何使用 Stack/Cabal 构建早期部分的程序输出作为同一构建后期部分的源代码?

我有一个非常特殊的依赖情况,我想将其打包到单个 Stack/Cabal 包中:我需要构建并运行我的程序以获取代码生成器的输入,该代码生成器生成需要链接到的输出。 .. 我的程序。

好的,更具体地说,这里是手动步骤:

  1. stack build 安装所有依赖项,并构建所有非 Verilator 使用的可执行文件。
  2. stack exec phase1运行第一个阶段,其中生成一个 Verilog 文件和一个 Clash.manifest文件。
  3. 我有一个自定义源代码生成器,它.manifest使用步骤 2 中的文件,并生成 C++ 代码和Makefile可用于驱动 Verilator 的代码。
  4. 运行Makefile步骤 3 中生成的:
    1. 它在第 2 步的 Verilog 源代码上运行 Verilator,生成更多的 C++ 源代码和一个新的 Makefile
    2. 然后它运行新生成的 second Makefile,它生成一个二进制库
  5. stack build --flag phase2构建第二个可执行文件。此可执行文件包含.hsc处理步骤 2 中生成的头文件的文件,并链接到步骤 4/2 中生成的 C++ 库。

我想自动化这个,这样我就可以运行,stack build而这一切都在幕后发生。我从哪里开始?!

为了说明整个过程,这里是一个独立的模型:

package.yaml

name: clashilator-model
version: 0
category: acme

dependencies:
  - base
  - directory

source-dirs: …
Run Code Online (Sandbox Code Playgroud)

haskell build ffi cabal haskell-stack

9
推荐指数
1
解决办法
99
查看次数