【Haskell】Stack用法详细介绍(长期持续更新中!)


1. Stack用户指南

1.1 关于Stack的一点认知

稍微回顾一下Stack的功能——它能够管理工具链(包括GHC和Windows用户的MSYS)、构建和注册库、创建构建工具的依赖 building build tool dependencies 等等,Stack有能力提供你所需的所有Haskell工具,即一站式服务 one-stop shop

要构建一个项目,Stack使用项目根目录中的 stack.yaml 文件作为蓝图,该文件包含一个引用,也称为解析器 resolver ,该引用指向将用来构建你的包的快照 snapshot

Stack还是隔离的,它不会在特定的Stack目录之外进行更改。Stack生成的文件通常位于Stack根目录 stack root directory 中(默认在Windows上是 %LOCALAPPDATA%\Programs\stack )或者每个项目的 ./.stack-work 目录中。其中,Stack根目录保存着属于快照 snapshots 的包、通过Stack安装的各种版本的GHC any stack-installed versions of GHC 。Stack不会篡改GHC的任何系统版本,也不会干扰Cabal-install安装的软件包或其他任何构建工具。

1.2 使用Stack构建一个Hello World项目

如何开始一个项目,用到的命令如下:

stack new my-project # 创建一个新目录(新项目),包含正确启动项目所需的所有文件
cd my-project 		 # 进入该项目
stack setup			 # 在一个隔离环境中下载GHC编译器(或者直接使用全局安装的GHC)和其他相关的库,不会干扰任何系统级安装
# stack path		 # 输出有关安装路径的许多信息
stack build			 # 构建这个项目,如果之前没有使用stack setup安装编译器的话,这里会由stack自动安装对应版本的GHC
stack exec my-project-exe # 执行程序

安装了Stack后,我们将创建一个新的Hello World项目(从一个模板),并且遍览大多数常用的Stack命令,具体介绍以Stack为中心 Stack-centric 的典型工作流。

stack new

创建新项目的起点是 stack new 命令,项目会包含一个和项目同名的Haskell包(也是一个文件夹),因此首先要选择一个有效的包名。顺带一提,stack new 不接受像 Learn_Haskell 这样的名字:
在这里插入图片描述
有效包名的规则如下,要求 one or more alphanumeric words separated by hyphens
在这里插入图片描述
我们将给项目起名为 hello-world(相应的包名和文件夹也名为 hello-world ) ,然后使用 new-template 项目模板。 从下面的安装过程可以发现,这个Stack命令需要进行相当多的初始设置——它下载了一个名为 new-template 的模板并以此来创建项目 hello-world ,然后寻找 .cabalpackage.yaml 文件来初始化这个项目,之后搜寻最佳快照(匹配到镜像源的页面),从中选择了解析器,初始化使用解析器的配置并写入到 hello-world\stack.yaml 文件中:

C:\CodeWorld\Code_Haskell>stack new hello-world new-template
Downloading template "new-template" to create project "hello-world" in hello-world\ ...
Looking for .cabal or package.yaml files to use to init the project.
Using cabal packages:
- hello-world\

Selecting the best among 20 snapshots...

* Matches https://mirrors.tuna.tsinghua.edu.cn/stackage/stackage-snapshots/lts/18/3.yaml

Selected resolver: https://mirrors.tuna.tsinghua.edu.cn/stackage/stackage-snapshots/lts/18/3.yaml
Initialising configuration using resolver: https://mirrors.tuna.tsinghua.edu.cn/stackage/stackage-snapshots/lts/18/3.yaml
Total number of user packages considered: 1
Writing configuration to file: hello-world\stack.yaml
All done.
C:\sr\templates\new-template.hsfiles:    6.06 KiB downloaded...

stack build

现在我们在 hello-world 文件夹中有了一个项目,开始运行最重要的Stack命令 stack build 。为了构建项目,Stack需要一个GHC,如果Stack发现你缺少了什么,就会为你进行安装。当然,也可以使用 stack setup 命令手动执行此操作。stack build 一旦安装了GHC,就会开始构建项目。需要注意的是,GHC会安装在你的全局Stack根目录

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

memcpy0

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值