haskell-flake使用指南
一、项目目录结构及介绍
srid/haskell-flake
是一个专为Haskell项目设计的Nix Flakes模块,简化了Haskell开发、打包和部署流程。以下是典型的项目结构当你应用此Flake到你的项目中时:
核心目录解析
.gitignore
: 包含不需要纳入版本控制的文件类型。flake.nix
: 主要配置文件,定义了整个Flake的结构和依赖,是接入haskell-flake
的关键。envrc
: 可选,用于direnv环境设置,自动化加载Nix壳环境。CHANGELOG.md
,LICENSE
,README.md
: 分别记录版本更新日志、许可证信息和项目介绍。nix
文件夹: 包含Nix相关的配置文件,如构建规则和Flake的自定义逻辑。- **
example
,test
**等: 可能包含示例代码或测试套件。
自定义添加的目录
- 你的Haskell源码通常包括顶级的
cabal
或cabal.project
文件,位于项目根目录或特定子目录下。 - 开发工具和其他辅助脚本可能放置在项目特定路径中,根据需要自定义组织。
二、项目的启动文件介绍
在Haskell-flake框架下,没有传统的单一“启动文件”,但有一个关键的配置点——flake.nix。这个文件是项目运行和构建的起点,通过它指定Haskell项目的配置、依赖、以及如何在不同的系统上构建和运行。
示例配置简化版如下:
{ inputs ? { ... } }:
inputs.flake-parts.lib.mkFlake {
inputs = {
flake-parts = { url = "github:hercules-ci/flake-parts"; };
haskell-flake = { url = "github:srid/haskell-flake"; };
};
outputs = inputs: inputs.flake-parts.lib.mkFlake {
systems = ["x86_64-linux"];
imports = [
inputs.haskell-flake.flakeModule
];
perSystem = _: [
{ haskellProjects.default = { ... }; }
];
};
}
这里flake.nix定义了项目的基础输入(依赖)、支持的系统、导入的Flake模块和每个系统上的具体配置。
三、项目的配置文件介绍
flake.nix —— 核心配置
- inputs: 指定了
flake-parts
和haskell-flake
这两个外部Flake作为项目输入。 - outputs: 定义了项目输出的方式,以及如何构建这些输出。
- systems: 列出了该Flake支持的目标操作系统,例如这里仅支持64位Linux。
- imports: 引入其他Flake模块以增强功能。
- perSystem: 根据不同的系统,可以定制化配置,如
haskellProjects.default
部分控制着Haskell项目的基本配置,比如基础包、额外包、开发壳配置等。
cabal.* —— Haskell项目配置
- cabal file: 确定Haskell包的元数据、依赖项和构建指令。对于单个包项目为
cabal
,多包项目则有cabal.project
。 - 源码文件: 直接对应Haskell的源代码文件,如
.hs
文件,它们不直接参与Flake配置,但是Flake配置影响其编译和环境。
通过这种方式,haskell-flake
提供了一个灵活而现代化的环境来管理复杂的Haskell项目,利用Nix的Flakes特性实现了更加透明和可扩展的项目结构。开发者只需遵循这些配置指南,就能轻松地设置和管理Haskell项目。