标签: haskell-stack

extra-deps 中的 Git 存储库

使用 引用特定版本的git存储库的正确方法是Stack什么?

堆栈抱怨在第一场出现的语法错误extra-deps的部分stack.yaml。下面的代码片段基于官方 Stack 文档中的一个示例,我不太确定为什么它不起作用。

# Dependency packages to be pulled from upstream that are not in the resolver
# (e.g., acme-missiles-0.3)
extra-deps:
- git: https://github.com/jwaldmann/moo
  commit: b429a7d371c0b268a4bb8dbea8044054aaf04cd5
- git: https://github.com/jwaldmann/monad-mersenne-random
  commit: d1f949fe60dc0c0cfbd310b339fe7fd5ecf4c5f5
- gray-code-0.3.1
#extra-deps: [gray-code-0.3.1]
Run Code Online (Sandbox Code Playgroud)

git haskell github haskell-stack

5
推荐指数
1
解决办法
692
查看次数

如何使用 Stack 和 Haskell Test.Framework 运行单个测试?

我正在克隆以下存储库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 运行单个测试?

haskell haskell-stack

5
推荐指数
2
解决办法
1268
查看次数

我在哪里可以找到 Haskell 的正确包名和版本?

说,我需要System.Eval.Haskell。或者别的什么。我怎么知道我应该在我的文件中指定哪个包package.yaml?当我转到https://hackage.haskell.org/package/plugins-1.5.7/docs/System-Eval-Haskell.html 时,我看不到包名称。

PS“插件”对我不起作用。因此,我认为这是不同的东西。但愿如此 :)


看起来配置中的额外依赖项和“常规”依赖项之间存在一些不太清楚的区别。提到plugins-1.5.7extra-dep 确实有效。我是否在这里做一些依赖管理不善,或者这是绿色的方式?

haskell haskell-stack

5
推荐指数
2
解决办法
748
查看次数

配置堆栈 ghci 提示

是否可以stack ghcighci通过~/.ghci文件配置的方式进行配置?

当前stack ghci不选取~/.ghci文件中的设置。

我正在考虑将提示设置为 lambda 而不是加载的模块:

:set prompt "\ESC[33m\STX?> \ESC[m\STX"
Run Code Online (Sandbox Code Playgroud)

更新

[neo@nixos:~/HaskellLearning/IdeTest]$ stack ghci 以下 GHC 选项与 GHCi 不兼容,尚未传递给它: -threaded 使用以下包配置 GHCi: IdeTest 使用主模块: 1. 包 `IdeTest'组件 exe:IdeTest-exe 与 main-is 文件:/home/neo/HaskellLearning/IdeTest/app/Main.hs GHCi,版本 8.2.2:http : //www.haskell.org/ghc/ :? 寻求帮助 从 /home/neo/HaskellLearning/IdeTest/.ghci 加载 GHCi 配置 从 /home/neo/.ghci 加载 GHCi 配置 [1 of 9] 编译 Ch13
( /home/neo/HaskellLearning/IdeTest/src/Ch13.hs, 解释 ) [2 of 9] 编译 Ch15 ( /home/neo/HaskellLearning/IdeTest/src/Ch15.hs, 解释 ) [3 of 9] …

haskell ghci read-eval-print-loop nixos haskell-stack

5
推荐指数
1
解决办法
1462
查看次数

如何将环境变量传递给通过堆栈运行的 Haskell 程序?

我只是注意到通过运行的 Haskell 程序stack不会从调用环境接收环境变量。这是一个示例程序:

-- testenv.hs
import System.Environment
main :: IO ()
main = print =<< getEnv "FOOBAR"
Run Code Online (Sandbox Code Playgroud)

如果我在没有堆栈的情况下运行它,就像这样,它可以工作:

% FOOBAR=123 runhaskell testenv.hs
"123"
Run Code Online (Sandbox Code Playgroud)

但是使用堆栈:

% FOOBAR=123 stack runhaskell testenv.hs
testenv.hs: FOOBAR: getEnv: does not exist (no environment variable)
Run Code Online (Sandbox Code Playgroud)

编译时也是如此:工作时FOOBAR=123 stack exec testenv失败FOOBAR=123 .stack-work/install/BLAHBLAH/testenv

有没有办法强制堆栈传递某些环境变量?

我遇到的真正问题是yesod devel,我想用环境变量覆盖一些设置,但yesod devel使用堆栈来运行程序,因此它们不会通过。

这是 NixOS 18.03.132262.0a73111bc29 上的堆栈 1.6.5。

haskell environment-variables nixos haskell-stack

5
推荐指数
1
解决办法
1288
查看次数

堆栈“计划构建失败。”

我正在尝试在项目中使用以下命令构建本地 hoogle 服务器,该项目lts-11.1用作解析器stack.yaml

stack hoogle -- server --local --port=8080
Run Code Online (Sandbox Code Playgroud)

它曾经可以工作,但现在由于此错误而失败:

? stack hoogle -- server --local --port=8080
Hoogle isn't installed. Automatically installing (use --no-setup to disable) ...
Minimum version is hoogle-5.0. Found acceptable hoogle-5.0.17.6 in your index, installing it.

Error: While constructing the build plan, the following exceptions were encountered:

In the dependencies for hoogle-5.0.17.6:
    haskell-src-exts-1.20.3 from stack configuration does not match >=1.21 && <1.22  (latest matching version is 1.21.0)
needed since hoogle is a build target. …
Run Code Online (Sandbox Code Playgroud)

haskell haskell-stack

5
推荐指数
0
解决办法
372
查看次数

如何解决具有相同包的不同版本范围的依赖树?

我正在尝试使用stack设置happstack-lite应用程序。

我用这些命令初始化了项目:

stack new my-happstack
cd my-happstack
stack setup
Run Code Online (Sandbox Code Playgroud)

我更改了package.yaml,因此它包含:

dependencies:
- base >= 4.7 && < 5
- happstack-lite >= 7.3
Run Code Online (Sandbox Code Playgroud)

然后我多次运行stack build并根据建议更改了项目目录中stack.yaml中的extra-deps(添加了依赖项,例如happstack-server)。

显然,我被要求将已经列出的包添加到extra-deps中,它们具有不同的版本边界和相同的版本(template-haskell-2.11.1.0):

stack.yaml内容:

extra-deps:
- happstack-lite-7.3.6
- happstack-server-7.4.6.4
- Win32-2.2.2.0@sha256:10ed55dd31315f386910c121c1d1d442df83bd2ee92090a753cd65300735a8ca
- network-2.6.3.6@sha256:1ca79d81af02d7acd6032d5e6c9bde4618a8fdcfbe19bd42b49d420183975df0
- template-haskell-2.11.1.0@sha256:f90d6ab73ad35c749e8547ca132e7ab5d32d2f8e7bb2e2ff6d597be26b58e061
- transformers-compat-0.5.1.4@sha256:1b4bfa8589afb1ca0e719129ab261bd90ef0cc3e6c0b9963f94970c082b61250
Run Code Online (Sandbox Code Playgroud)

堆栈构建的输出:

F:\Projects\Haskell\my-happstack>stack build

Error: While constructing the build plan, the following exceptions were encountered:

In the dependencies for Cabal-2.4.1.0: …
Run Code Online (Sandbox Code Playgroud)

haskell happstack haskell-stack

5
推荐指数
0
解决办法
142
查看次数

是否可以像 NPM(NodeJS)一样设计 Stack(Haskell)?

哈斯克尔工具集是目前最流行的Haskell包管理器,现在,它的主要目标是使大厦哈斯凯尔包重复性。

但是堆栈方法的目标是找到一个巨大的无冲突包修订集,并将其称为snapshot. 通过这种方式,包维护者被推送更新他的包的依赖项,这样它就不会与最近的snapshot.

我不得不说,这个设计太理想了,无法在现实世界中工作。

相比之下,NPM(NodeJS 的包管理器)通过一种更实用的方式来实现这个目标:它允许冗余。在钻石依赖的情况下,例如a -> b, c; b -> d(v1); c -> d(v2),NPM 只需db和分别安装两个不同的版本c。这样,使用包的用户就可以像黑盒一样依赖包,无需考虑依赖之间是否存在冲突的深度依赖。

我想知道为什么 Stack 的设计不允许对包进行冗余修订是否有一些实际的原因。是否可以为 Haskell 实现这样的包管理器?它的实施中最困难的部分是什么?

haskell package-managers haskell-stack

5
推荐指数
1
解决办法
211
查看次数

在 docker-compose 命令中运行 stack build --file-watch 时如何修复“&lt;stdin&gt;: hGetLine: end of file”

我尝试在 docker-compose 服务中为我的 haskell RPC 服务器代码进行自动重建和 rexecute 设置。该命令是一个 bash 脚本stack build --file-watch(以及另一个在二进制文件更改时启动二进制文件的命令,但这有效)。问题是,无论我尝试什么,stack build --file-watch命令都会失败并出现一个神秘的错误<stdin>: hGetLine: end of file

我不明白为什么会出现此错误,尤其是因为如果我使用 运行相同的命令docker-compose run bd-service bash -l -c "./bd-service/compile_hs_and_run.sh",它会按预期工作。我相信这是执行 docker-compose up 时如何处理 bash 的问题,而不是堆栈本身的问题,但我承认我一无所知。

另请注意:

  • 删除 --file-watch 选项使脚本工作
  • 用 --file-watch-poll 替换 --file-watch 不会改变任何东西

这是服务定义:

  # this is my service definition in docker-compose.yml
  bd-service:
    build:
      context: '.'
      dockerfile: 'dockerfiles/bd_heroku_service.Dockerfile'
      args:
        UID: "$UID"
    command:  bash -l -c "./bd-service/compile_hs_and_run.sh"
    user: "$UID"
    volumes:
      - .:/app/user

Run Code Online (Sandbox Code Playgroud)

这是相关的 dockerfile:

# Inherit …
Run Code Online (Sandbox Code Playgroud)

bash haskell docker docker-compose haskell-stack

5
推荐指数
0
解决办法
323
查看次数

Haskell 工具栈和可执行文件大小

我使用Stack 工具创建了一个 Haskell CLI 。感谢 Travis,我刚刚成功设置了交叉编译,但我不明白为什么 linux (6MB)、osx (2MB) 和 windows (18MB!) 之间的可执行文件大小如此不同。怎么来的?

发布:https : //github.com/unfog-io/unfog-cli/releases/tag/v0.1.2

特拉维斯 conf:https : //github.com/unfog-io/unfog-cli/blob/master/.travis.yml

编辑

当我用 tar.gz 压缩可执行文件时,我减少了差异,但仍然如此!我现在有 linux (1.35MB)、osx (0.61MB)、windows (3.93MB)(见发布

executable haskell cross-platform travis-ci haskell-stack

5
推荐指数
0
解决办法
164
查看次数