标签: haskell-stack

我是怎么想在新的堆栈项目中将src/Lib.hs和app/Main.hs之间的代码分开?

我正在关注堆栈指南,我得到了一个新的项目设置(耶!).

它生成了以下文件布局:

.
??? app
?   ??? Main.hs
??? .gitignore
??? LICENSE
??? helloworld.cabal
??? Setup.hs
??? src
?   ??? Lib.hs
??? stack.yaml
??? test
    ??? Spec.hs
Run Code Online (Sandbox Code Playgroud)

根据指南中的" helloworld中的文件 "部分:

app/Main.hs,src/Lib.hs和test/Spec.hs文件都是构成项目实际功能的Haskell源文件(我们在此不再赘述).

我真的希望他们暂时停留在那一秒钟,因为我不知道它之间的区别app/Main.hssrc/Lib.hs应该是什么.我应该把哪个代码放在哪里?

在哪些方面我应该划分之间的代码app/,src/,app/Main.hssrc/Lib.hs

如果我只是编写应用程序或只是编写库,我是否需要这两个文件/目录?

haskell haskell-stack

14
推荐指数
2
解决办法
1065
查看次数

我第一次设置 Haskell 开发环境的经验是常见的还是一次性的?

我决定从 Haskell 开始,但遇到了一个陌生的生态系统。我已经写下了我目前的结论的短版和长版(现在我意识到我遇到的问题可能是暂时的,将来不会适用,并意识到下面的文字可能不适合 SO)。

我现在特别想知道的是

  • 我所描述的设置对退伍军人有意义吗?
  • 为什么 GHC 8.6.5 是推荐版本,而 8.8.2 有什么问题?

简短版本

如果这是您第一次接触 Haskell,并且想要安装 Haskell(ghccup、ghc、cabal-install、stack)和一个由 Visual Studio Code、Haskell 语言服务器插件和 HIE 组成的开发环境。确保stack new按照(https://docs.haskellstack.org/en/stable/README/#start-your-new-project)和您正在安装的 HIE 都解析为由安装的相同版本的 GHC ghcup.

长版

嗨哈斯克勒!

我正在分享我对 Haskell 的尝试,希望能将其他人从一两个新手错误中拯救出来。像我问过 google 的所有明智的人一样how to install haskell,这使我进入了以下页面https://www.haskell.org/platform/(我使用的是 macOS 10.13.6)。我已经按照建议下载了 ghcup,然后又安装了 ghc 8.6.5 和 cabal-install 3.0.0.0。两者都是 ghcup 推荐的版本。我能够ghcup listghcup list -t all一切看起来都很好。 stack是下一个推荐的。这个过程很简单,在堆栈完成它需要做的一切之后,我stack --version告诉我我有
Version 2.1.3, Git revision 0fa51b9925decd937e4a993ad90cb686f88fa282 (7739 commits) x86_64 hpack-0.31.2 …

haskell haskell-stack haskell-ide-engine

14
推荐指数
1
解决办法
1362
查看次数

`stack clean`和删除`.stack-work`目录有什么区别?

1上下文

我参与了一个涉及大量C位和FFI的Haskell项目.所以我发现自己经常运行并重新运行命令

$ stack build
$ stack build --force-dirty
$ stack clean
$ rm ./.stack-work
Run Code Online (Sandbox Code Playgroud)

反复进行,以便将C位正确链接到Haskell位.换句话说,有时事情在运行时才起作用stack build,有时它们不起作用(在这种情况下,我被迫一遍又一遍地循环上述命令,直到我的项目正确构建).

这意味着我没有正确理解在组装Haskell位之前stack(通过ghc)如何组装C位.所以这里有一个问题可以帮助我开始清理我的困惑:

2问题

运行stack clean和删除目录内容之间是否有任何值得注意的区别.stack-work?是否有.stack-work必要删除目录作为一个很好的预防措施,以确保您实际运行干净的构建?

haskell haskell-stack

13
推荐指数
1
解决办法
1300
查看次数

为什么全新安装的Haskell-Stack和GHC如此大/大?

这里通过安装脚本重新安装Haskell Stack时:

wget -qO- https://get.haskellstack.org/ | sh
Run Code Online (Sandbox Code Playgroud)

其次是:

stack setup
Run Code Online (Sandbox Code Playgroud)

你将得到一个$HOME/.stack/1.5 GB大小的目录(从120多MB下载).如果你运行:

stack update
Run Code Online (Sandbox Code Playgroud)

大小增加到2.5 GB.

我习惯于Java,它通常被认为是大/大(几乎涵盖所有内容并且已经弃用了后向兼容性的替代方案),但作为比较:包括JDK,独立JDK和JDK源的IDE可能大约为1.5 GB的大小.

另一方面,Haskell是一种"小美"语言(从我所听到和读过的,这可能主要是指语法和语义,但仍然),是大/大,对我来说似乎很奇怪.

  1. 它为什么这么大(它与这个问题有关吗?)?
  2. 这个尺码是正常还是我安装了额外的东西?
  3. 如果有几种(4?,5?)口味的东西,那么除了一个之外我可以删除吗?
  4. 是否有一些数据缓存/临时可以删除?
  5. 最大的目录是:.stack/programs/x86_64-linux/ghc-tinfo6-nopie-8.2.2/lib/ghc-8.2.2(1.3 GB)和.stack/indices/Hackage(980 MB).我假设第一个是安装包(和相关的stack setup),后者是Hackage包存档(和相关stack update)的一些索引?这些可以减少(如上所述3或在线获取所需的Hackage信息)?

haskell ghc haskell-stack

13
推荐指数
1
解决办法
1074
查看次数

在 Windows 上使用 Stack 编译测试框架时找不到模块 System.Console.MinTTY.Win32

我在 Windows 上尝试使用测试框架编译 Haskell 测试时遇到错误。

\n

重现步骤

\n

使用 Stack 创建一个新库:

\n
$ stack new repro simple-library\n
Run Code Online (Sandbox Code Playgroud)\n

然后导航到该repro目录并repro.cabal通过添加test-framework以下内容来编辑文件build-depends

\n
library\n  hs-source-dirs:      src\n  exposed-modules:     Lib\n  build-depends:       base >= 4.7 && < 5,\n                       test-framework\n  default-language:    Haskell2010\n
Run Code Online (Sandbox Code Playgroud)\n

现在尝试编译该库:

\n
$ stack build\n
Run Code Online (Sandbox Code Playgroud)\n

预期结果

\n

代码编译通过

\n

实际结果

\n

编译失败并显示以下错误消息:

\n
$ stack build\nWARNING: Ignoring mintty\'s bounds on Win32 (>=2.13.1); using Win32-2.6.2.1.\nReason: trusting snapshot over cabal file dependency information.\nmintty        > configure\nmintty …
Run Code Online (Sandbox Code Playgroud)

haskell haskell-stack

13
推荐指数
1
解决办法
1029
查看次数

Haskell Stack Ghci测试套件

我正在尝试使用堆栈在ghci中加载我的测试套件并让它加载QuickCheck和hspec依赖项.

我怎样才能做到这一点?

我正在使用franklinchen模板.
https://github.com/commercialhaskell/stack-templates/blob/master/franklinchen.hsfiles

我试过
堆栈ghci spec
stack ghci test-suite
stack ghci --main-is spec

我修改了测试套件规范以定位main-is:LibSpec.hs文件

test-suite spec
  default-language:    Haskell2010
  ghc-options:         -Wall
  type:                exitcode-stdio-1.0
  hs-source-dirs:      test
  main-is:             LibSpec.hs
  build-depends:       base
                     , chapterexercises
                     , hspec
                     , QuickCheck
Run Code Online (Sandbox Code Playgroud)

haskell cabal haskell-stack

12
推荐指数
1
解决办法
821
查看次数

stack.yaml文件应该被检入版本控制吗?

我是一个很新的堆栈,想知道是否git commit.gitignore该文件.

这两种选择的含义是什么?

haskell haskell-stack

11
推荐指数
1
解决办法
435
查看次数

强制`stack`重建已安装的包

我经常安装一个依赖于外部库的软件包,并设法将这些外部库移动到其他位置,以便编译后的程序以加载程序错误退出.

在这些情况下,我只想要堆栈来重建已经安装的软件包,但我不知道这是怎么回事.stack install --force-dirty似乎没有用,因为它只是尝试在当前工作目录中重建项目.


最近的例子:

我想看看是否regex-pcre需要在Windows系统上不存在C库,所以我点击了stack install regex-pcre.这很好,但后来我意识到我在此之前mingw-w64-x86_64-pcre通过stacks 安装了pacman.我再次删除它pacman -R并尝试stack install regex-pcre再次运行,但没有重建它.由于--force-dirty上述原因,也没有添加工作.

haskell haskell-stack

11
推荐指数
1
解决办法
2481
查看次数

使用堆栈在ghci中加载新包

有没有办法在GHCI中使用Stack加载包并玩它?

因此,当ghci加载时,我们可以导入模块并查看它的类型签名等.

haskell haskell-stack

11
推荐指数
1
解决办法
1658
查看次数

haskell-stack的奇怪错误.它不再安装任何东西了

我在尝试安装软件包时遇到堆栈错误.

Run from outside a project, using implicit global project config
Using resolver: lts-8.0 from implicit global project's config file: /home/chuck/.stack/global-project/stack.yaml
Invalid package ID: "array-0.5.1.1 base-4.9.1.0 binary-0.8.3.0 bytestring-0.10.8.1"
Run Code Online (Sandbox Code Playgroud)

stack --version工作原理:

Version 0.1.10.0 x86_64
Run Code Online (Sandbox Code Playgroud)

和堆栈设置返回:

Run from outside a project, using implicit global project config
Using resolver: lts-8.0 from implicit global project's config file: /home/chuck/.stack/global-project/stack.yaml
stack will use a locally installed GHC
For more information on paths, see 'stack path' and 'stack exec env'
To use this GHC and packages outside …
Run Code Online (Sandbox Code Playgroud)

haskell haskell-stack

11
推荐指数
1
解决办法
2569
查看次数

标签 统计

haskell ×10

haskell-stack ×10

cabal ×1

ghc ×1

haskell-ide-engine ×1