Stack Usage

2018/05/24 Haskell Tool

简介

Cabal 和 Stack 都是 Haskell 的包管理工具, 但是 Cabal 中所有项目共享一个全局的包空间,而 Stack 通过 Stackage 解决了这个问题。简单来说, Stackage 中每个 GHC 版本都有自己的包空间, 每个项目通过指定版本来获取包空间中的包。

安装

安装方法请参考 官方文档 , 在 Mac 上直接使用如下命令: brew install haskell-stack

Stack 如果使用默认的国外包源的话比较慢,所以可以改成国内的, 修改 ~/.stack/config.yaml 文件,添加如下配置:

package-indices:
- name: Tsinghua
  download-prefix: https://mirrors.tuna.tsinghua.edu.cn/hackage/package/
  http: https://mirrors.tuna.tsinghua.edu.cn/hackage/00-index.tar.gz
setup-info: "http://mirrors.tuna.tsinghua.edu.cn/stackage/stack-setup.yaml"
urls:
  latest-snapshot: http://mirrors.tuna.tsinghua.edu.cn/stackage/snapshots.json
  lts-build-plans: http://mirrors.tuna.tsinghua.edu.cn/stackage/lts-haskell/
  nightly-build-plans: http://mirrors.tuna.tsinghua.edu.cn/stackage/stackage-nightly/

配置 vscode

下载如下插件;

  1. Haskell Syntax Highlighting
  2. Haskell ghc-mod
  3. haskell-linter
  4. Haskelly

然后通过 stack 安装如下包:

stack install ghc-mod
stack install hlint
stack install intero
stack install QuickCheck

安装 ghc-mod 的时候,因为安装的最新版 stack,配置文件 ~/.stack/global-project/stack.yamlresolver: lts-11.6 代表使用的 GHC 为 8.2.2 会出现包版本错误,查找了下解决方法是在这个配置文件中加上如下配置:

extra-deps:
  - https://hackage.haskell.org/package/ghc-mod-5.9.0.0/candidate/ghc-mod-5.9.0.0.tar.gz
  - cabal-helper-0.8.0.2
  - extra-1.5.3
  - monad-journal-0.7.2
  - optparse-applicative-0.13.2.0
  - either-4.4.1.1
  - free-4.12.4
  - haskell-src-exts-1.19.1
  - hlint-2.0.11
  - conduit-1.2.13.1
  - conduit-extra-1.1.17
  - resourcet-1.1.11

然后执行如下命令:

stack build ghc-mod
stack install ghc-mod

最后在 vscode 的用户配置文件中添加如下两个配置:

{
    "haskell.ghcMod.executablePath": "stack",
    "haskell.hlint.executablePath": "stack"
}

常用命令

命令 含义
stack new PACKAGE_NAME [TEMPLATE_NAME] 创建一个项目
stack templates 列出所有可用的模板用于 stack new 生成项目
stack build [TARGET] 构建指定的项目
stack path 查看当前使用的 GHC 等信息
stack ghci 打开当前 GHC 命令行交互
stack runghc FILE 运行指定的 Haskell 文件

Search

    Table of Contents