我想试试Writerghci中的monad.正如这里所建议的,我试图只使用堆栈来管理GHC和包,并避免全局安装.
从一个全新的Ubuntu 15.04安装,安装堆栈后:
stack setup
mkdir lyah && cd lyah
stack new
stack install mtl
stack ghci
ghci> import Control.Monad.Writer
Could not find module ‘Control.Monad.Writer’
It is a member of the hidden package ‘mtl-2.1.3.1’.
Run Code Online (Sandbox Code Playgroud)
我知道pre-stack ghc-pkg用于显示/隐藏包,但我不知道如何继续"取消隐藏"mtl包.
我的一个Stack项目中有多个可执行文件:
executable m1
hs-source-dirs: src
main-is: Main1.hs
default-language: Haskell2010
build-depends: base >= 4.7 && < 5
executable m2
hs-source-dirs: src
main-is: Main2.hs
default-language: Haskell2010
build-depends: base >= 4.7 && < 5
Run Code Online (Sandbox Code Playgroud)
stack build :m2
Run Code Online (Sandbox Code Playgroud)
但实际发生的是,无论是否包含包名,包类型等,都可以构建可执行文件m1和m2.
可能是什么导致了这个?
尝试使用postgresql-simple在GHCI中创建数据库连接时,我得到GHCI段错误.
我使用的是GHC 8.0.1,OSX 10.11.16.我没有系统GHC,只有堆栈安装的系统.
如果我在我的项目中执行以下操作,则会出现以下错误:
$ stack ghci
Loaded GHCi configuration from /private/var/folders/wb/vvtxjd7n2qz02f571yjyr9j40000gs/T/ghci62972/ghci-script
gchi> :set -XOverloadedStrings
gchi> import Database.PostgreSQL.Simple
gchi> let connstr = "host=localhost port=5432 user=myusername password=mypass dbname=local"
gchi> conn <- connectPostgreSQL connstr
zsh: segmentation fault stack ghci
Run Code Online (Sandbox Code Playgroud)
我认为它可能值得查看它提到的文件,所以这里有以下内容:
> cat /private/var/folders/wb/vvtxjd7n2qz02f571yjyr9j40000gs/T/ghci62972/ghci-script
:load "/Users/erewok/projects/haskell/simpleservantblog/app/Main.hs" "Api" "Api.Post" "Api.User" "Config" "Html.Home" "Models.Author" "Models.Post"
:module + Api Api.Post Api.User Config Html.Home Models.Author Models.Post
Run Code Online (Sandbox Code Playgroud)
它是从项目加载的所有模块的列表(编译并运行正常).
这是从启动ghci到seg故障的所有内容的完整输出:
$ stack ghci
The following GHC options are incompatible with GHCi and have not been passed …Run Code Online (Sandbox Code Playgroud) 我想为Darwin创建一个静态可执行文件,用于一个我编写的名为difftodo的小型实用程序。difftodo间接取决于pcre,我希望人们能够下载二进制文件并运行它而不必先执行brew install pcre。
如果我不使用选项进行编译,则会得到一个可动态链接pcre的二进制文件:
$ otool -L /Users/jml/src/difftodo/.stack-work/install/x86_64-osx/lts-7.1/8.0.1/bin/git-todo
/Users/jml/src/difftodo/.stack-work/install/x86_64-osx/lts-7.1/8.0.1/bin/git-todo:
/usr/local/opt/pcre/lib/libpcre.1.dylib (compatibility version 4.0.0, current version 4.7.0)
/usr/lib/libiconv.2.dylib (compatibility version 7.0.0, current version 7.0.0)
/usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 1226.10.1)
Run Code Online (Sandbox Code Playgroud)
按照https://github.com/commercialhaskell/stack/issues/1032上的说明,我尝试了以下操作:
$ stack build --ghc-options -static --ghc-options -optl-static
difftodo-0.2.0: configure
Configuring difftodo-0.2.0...
difftodo-0.2.0: build
Preprocessing library difftodo-0.2.0...
ld: illegal text reloc in '_c1TGM_info' to '_stg_sel_1_upd_info' for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
`gcc' failed …Run Code Online (Sandbox Code Playgroud) 我在防火墙后面有关于从互联网下载软件的严格规则,所以我想知道是否可以一次下载整个堆栈LTS快照并在本地服务器上提供服务,然后我们可以指向堆栈工具.
通过"快照",我将指代所有包的源代码,因为理想情况下我们需要从该本地服务器绘制以构建多个(堆栈支持的)平台(Linux,Windows).
例如,能够转到防火墙内的新机器,然后运行"stack new",然后编辑yaml文件以将其指向具有给定解析器编号的本地堆栈服务器,那么它会表现得很好通常从那时起,除了总是从本地服务器下载包.
编译器怎么样?我知道堆栈也下载了编译器,所以我想这些必须包含在下载的各种平台的快照包中吗?
谢谢
我正在遵循这些指示.我成功了stack new,stack setup但stack build失败了.
我发现一个git问题,这可能是由于cabal文件中列出的额外文件,但删除它们并没有解决问题(我只是使用new-template没有任何更改).我在Ubuntu 14.04上并使用脚本安装了堆栈.还有什么我可以研究一下吗?
看来这可能是由于我试图在cifs目录中构建.我能做些什么来处理这件事吗?
# stack build
ehri-haskell-0.1.0.0: configure (lib + exe)
Configuring ehri-haskell-0.1.0.0...
ehri-haskell-0.1.0.0: build (lib + exe)
Preprocessing library ehri-haskell-0.1.0.0...
Preprocessing executable 'ehri-haskell-exe' for ehri-haskell-0.1.0.0...
ehri-haskell-0.1.0.0: copy/register
Installing library in
/mnt/docs/RubymineProjects/ehri-haskell/.stack-work/install/x86_64-linux/lts-8.6/8.0.2/lib/x86_64-linux-ghc-8.0.2/ehri-haskell-0.1.0.0-Kh3VLZPfbij7EgcL22QBMN
Installing executable(s) in
/mnt/docs/RubymineProjects/ehri-haskell/.stack-work/install/x86_64-linux/lts-8.6/8.0.2/bin
/mnt/docs/RubymineProjects/ehri-haskell/.stack-work/install/x86_64-linux/lts-8.6/8.0.2/bin/.copyFile5965166491189641421.tmp:
copyFile: does not exist (Host is down)
'cabal copy' failed. Error message:
-- While building package ehri-haskell-0.1.0.0 using:
/root/.stack/setup-exe-cache/x86_64-linux/Cabal-simple_mPHDZzAJ_1.24.2.0_ghc-8.0.2 --builddir=.stack-work/dist/x86_64-linux/Cabal-1.24.2.0 copy
Process exited with code: ExitFailure 1 …Run Code Online (Sandbox Code Playgroud) 我正在使用精益定理证明器,我想构建类似堆栈的功能并开始构建库缓存.我不确定的一件事是何时删除缓存中的旧包.我可以认为,如果我安装了两个版本的Lean,比如3.3.0和3.3.1,我可以争辩保留所有适用于这些版本的软件包的所有版本.由于精益语法移动速度很快,因此限制性很强.
另一方面,我可以看到只保留任何给定包的10个版本.这可能是10个最新版本或10个最近请求的版本.
我很想知道在构建stack和相关工具中考虑的一些想法.
使用ghc构建在powershell上打印格式错误的错误消息(如在其他终端中):
PS > ghc .\src\XXX.hs -package ghc -package ghc-paths -package filepath
[1 of 1] Compiling XXX ( src\XXX.hs, src\XXX.o )
src\XXX.hs:340:9: error:
parse error on input `<-'
Perhaps this statement should be within a 'do' block?
|
340 | blah <- blah blah blah
| ^^
Run Code Online (Sandbox Code Playgroud)
但是当通过堆栈构建时,出现了问题:
PS > stack build
XXX-0.1.0.0: build (lib + exe)
Preprocessing library for XXX-0.1.0.0..
Building library for XXX-0.1.0.0..
[2 of 3] Compiling XXX ( src\XXX.hs, .stack-work\dist\5c8418a7\build\XXX.o )
?[;1msrc\XXX.hs:340:9: ?[;1m?[31merror:?[0m?[0m?[;1m?[0m?[0m?[;1m
parse error on input `<-' …Run Code Online (Sandbox Code Playgroud) 我尝试跑步
$ stack build --profile && stack run myexec --rts-options -p
Run Code Online (Sandbox Code Playgroud)
但是我明白了
...
Registering library for mylibrary-0.1.0.1..
Completed 2 action(s).
myexec: the flag -p requires the program to be built with -prof
...
Run Code Online (Sandbox Code Playgroud)
我知道我可以跑步
$ .stack-work/dist/x86_64-linux/Cabal-2.4.0.1/build/myexe/myexe +RTS -p
Run Code Online (Sandbox Code Playgroud)
但是那有什么意义stack run呢?我不想知道cabal的版本和体系结构等(所有这些都发生在makefile中)。
更广泛地说,我希望能够将Haskell Stack用作大学班级项目的构建工具。我遇到的主要问题是,当学生尝试使用Haskell堆栈来构建项目时,由于堆栈会在本地安装沙盒GHC编译器和所有库,因此他们很快就会遇到空间配额问题。
我希望能够将标志添加到项目文件中,以便使用系统GHC和库来解决此问题。目前,我们的IT部门正在运行系统GHC部分,但是stack仍在本地安装所有库。
我愿意接受其他解决方案。