我正在尝试使用servant和堆栈松散地设置基本项目,遵循官方仆人教程和堆栈指南.一旦我添加import Servant堆栈构建失败:
Could not find module ‘Servant’
Use -v to see a list of the files searched for.
Run Code Online (Sandbox Code Playgroud)
我已经定义servant为此模块的依赖项,并且堆栈注意到它stack dependencies显示为:
aeson 0.8.0.2
array 0.5.1.0
attoparsec 0.12.1.6
base 4.8.1.0
binary 0.7.5.0
blaze-builder 0.4.0.1
bytestring 0.10.6.0
bytestring-conversion 0.3.1
case-insensitive 1.2.0.4
containers 0.5.6.2
deepseq 1.4.1.1
dlist 0.7.1.2
double-conversion 2.0.1.0
ghc-prim 0.4.0.0
hashable 1.2.3.3
http-media 0.6.2
http-types 0.8.6
integer-gmp 1.0.0.0
mtl 2.2.1
network-uri 2.6.0.3
parsec 3.1.9
primitive 0.6
scientific 0.3.3.8
servant 0.4.4.2
string-conversions 0.4 …Run Code Online (Sandbox Code Playgroud) 我正在尝试将外部cpp库与haskell链接.运行stack build似乎正确构建它,但当我尝试运行时,stack repl我收到此错误:
ghc: panic! (the 'impossible' happened)
(GHC version 8.0.1 for x86_64-unknown-linux):
Loading archives not supported
Run Code Online (Sandbox Code Playgroud)
app.cabal
executable app-server
...
include-dirs: /usr/local/include
extra-libraries: symengine stdc++ gmpxx gmp
...
Run Code Online (Sandbox Code Playgroud)
stack.yml
flags: {}
packages:
- '.'
extra-include-dirs:
- /usr/local/include
extra-lib-dirs:
- /usr/local/lib
extra-deps: []
extra-package-dbs: []
resolver: lts-7.1
Run Code Online (Sandbox Code Playgroud)
我在mac osx sierra和debian jessie上尝试过.使用ghc-8.0.1(来自lts-7.1).我symengine stdc++ gmpxx gmp在我的机器上安装了.
有谁知道我在这里做错了什么?
所以我有一个个人堆栈库,让我们称之为Foo.在Foo,我有一个FooModule名为的模块文件FooModule.hs.我有另一个名为的堆栈项目Bar.如何将FooModule.hs模块导入项目Bar?
如何将+RTS选项传递给使用 运行的程序stack exec?
我已经添加-rtsopts到ghc-options我的 cabal 文件中,并使用stack build. 如果我手动运行程序,普通和+RTS命令行参数都可以工作:
>.stack-work\dist\ca59d0ab\build\iterate-strict-exe\iterate-strict-exe.exe 25 +RTS -s
OK
3,758,156,184 bytes allocated in the heap
297,976 bytes copied during GC
...
Run Code Online (Sandbox Code Playgroud)
但是如果我stack exec只用普通选项运行它到达程序
>stack exec iterate-strict-exe -- 25 +RTS -s
OK
Run Code Online (Sandbox Code Playgroud)
如果我按照@epsilonhalbe 的建议调整参数的顺序,我会得到相同的结果。
>stack exec -- iterate-strict-exe 25 +RTS -s
OK
Run Code Online (Sandbox Code Playgroud)
似乎没有建议的--rts-options选项传递给stack exec.
>stack exec --rts-options "-s" -- iterate-strict-exe 25
Invalid option `--rts-options'
Usage: stack exec CMD …Run Code Online (Sandbox Code Playgroud) 我不能改变 GHC 的编译时间,但我可以控制编译的环境。我可以用git和stack做什么来最大程度地减少由于(重新)构建造成的停机时间?
Haskell 堆栈在.stack-work目录中缓存已编译的依赖项,它非常适合一次处理一件事。但是,我发现自己在分支之间来回切换。我已经git checkout到位了,也许有些.stack-work缓存是可用的。但是我非常喜欢git worktree在完全不同的目录中获取分支的副本。工作树在构建时间上尤其困难,因为每个工作树目录都有自己的.stack-work的 .
我一直在阅读有关 Nix 和 Haskell 的文章,但是由于堆栈创建了自己的缓存,因此它会忽略 Nix 编译和安装的任何内容。从我读到的内容来看,我真的希望 Nix 处理依赖项并使用堆栈来处理我的个人代码。我从 stackage and 中受益匪浅stack solver,所以我不想放弃它们。但是当我在运行时看到一整屏“取消注册”消息时stack build --only-dependencies && stack ghci,我知道我至少有 10-15 分钟的时间才能收到提示。
非常感谢!
我正在尝试将我为 haskell 堆栈安装的 ghc 版本从 8.0.2 版更新到 8.2.1 版,但似乎我遗漏了一些东西。
[user@localhost ~]$ stack --resolver ghc-8.2.1 setup
stack will use a sandboxed GHC it installed
For more information on paths, see 'stack path' and 'stack exec env'
To use this GHC and packages outside of a project, consider using:
stack ghc, stack ghci, stack runghc, or stack exec
[user@localhost ~]$ stack ghci
Configuring GHCi with the following packages:
GHCi, version 8.0.2: http://www.haskell.org/ghc/ :? for help
Loaded GHCi configuration from /tmp/ghci7878/ghci-script
Prelude> :q …Run Code Online (Sandbox Code Playgroud) 我试图使用M-.去定义一个函数,但它似乎intero-goto-definition只适用于我目前正在开发的库,而不适用于我正在导入的库。
这是我的 stack.yaml:
flags: {}
extra-package-dbs: []
packages:
- location: libs/not-gloss/not-gloss # the library I am trying to C-. into
- .
extra-deps:
- spatial-math-0.4.0.0
resolver: lts-9.0
Run Code Online (Sandbox Code Playgroud) 我在,NixOS但我认为这个问题应该适用于任何使用的平台nix。
我通过试用发现stack可以与几个选项一起使用来构建项目,但我不完全了解它们之间的区别,
stackstack --system-ghcstack --nix问题:
--nix参数吗?nix处理haskell项目的方式是什么,应该使用cabal(cabal2nix)代替stack?nix,这是什么原因?我想创建一个Haskell Stack包,其中包含另一个Haskell Stack包extra-dep.有问题的是,我试图包含的包是使用Haskell的FFI绑定到某些C代码.
如果我只是stack unpack 和stack build那个包(HasCacBDD)它工作得很好,但当我把它包含在一个extra-dep堆栈抱怨丢失的库.
望着Setup.hs那原包的,我看到它基本上创建了一个叫做静态库libHasCacBDD.a,并将其放在正确的文件夹里面.stack-work的路径为它进行连接.当我将它包含在我自己的项目中时,这个库正好是一个错误.
仔细查看.stack-work我自己项目的文件夹,我看到提到libHasCacBDD.a的确实在隐藏在某个地方的目录中.幸运的是,库正在构建正确但我的项目找不到它.
官方的Haskell Stack文档说明了在这种情况下该怎么做,但我认为它不够具体,无法给我一个满意的答案.
我需要做的是指定libHasCacBDD.a存储库的路径作为extra-lib-dirs选项.然而,我不知道如何以独立于平台的方式做到这一点(如果我在计算机中对路径进行硬编码,它将在其中工作,并且在这种情况下执行包的重点是什么).
我在Github上创建了一个问题,其中包含有关详细信息的更多信息.
有什么建议?
在build使用Stack project/dist/编译Haskell程序时,我试图将可执行文件写入其中,但是无论我使用什么命令行参数或更改的配置文件,它始终以结尾project/.stack-work/dist/x86_64-osx/Cabal-2.2.0.1/build/project/。
花时间寻找在命令行参数体面的数额后stack命令,以及期权project.cabal,Setup.hs以及stack.yaml,我似乎无法找到如何配置的输出位置stack build。
如何配置可执行文件的输出位置stack build?