如何在Haskell程序中组织文件?

18

我刚开始尝试使用Haskell进行编程。经过多年的Ruby开发,我已经习惯了Ruby on Rails或Rugui所使用的文件组织方式。

在Haskell程序中,有没有关于文件组织的指导方针、最佳实践或甚至框架呢?

(《学你一个 Haskell》和《实际 Haskell》并没有真正处理这个问题。)

3个回答

15

4
主要限制是层次模块名称必须具有层次目录布局。
因此,Data.Map.Fast被放置在Data/Map/Fast.hs中。
然后,将程序和库分解为逻辑单元,在单独的模块中,并让依赖项解决需要的模块。

2
我知道这是一个非常老的问题,但作为一个初学者,我仍然没有找到令人满意的答案,并且在如何布局项目方面似乎几乎没有指导。

以下是我发现有用的内容。

本质上,项目布局是为了让我们在开发时有一个起点思路,因此它与我们开发程序的方式密切相关。例如,在 Java 等编程语言中,您首先要做接口,然后再实现它。区分接口和类有助于帮助您排序先后顺序。

对于 Haskell 也是类似的,在某种意义上,您粗略地实现您的想法决定了您如何布置您的项目。


以下是我的一个小项目的摘录:

- README.md
- LICENSE
- docs/
- package.yml
- stack.yml
- Setup.hs
- tests/
  - SomeTypeSpec.hs
- app/
  - Main.hs
- src/
  - Primitive/
    - Definition/
      - SomeType.hs
      - Error.hs
    - Instance/
      - SomeType.hs
  - FunctionDef/
    - Setter.hs
  - Control/
    - SomeType.hs
    - MyProcess.hs

我的迭代方式如下:

  • Definition下编写一个带有一些ADT的SomeType.hs
  • Error.hs中编写关于SomeType的相关错误
  • Instance下通过SomeType编写Setter.hs的实现
  • 根据应用程序逻辑在Control下编写关于SomeType.hs的控制函数
  • tests下编写与SomeType.hs相关的功能的小型测试套件
  • 修复编译错误。
  • 修复编译错误。
  • 修复编译错误。
  • 修复编译错误。 . . .
  • 使用另一个原始数据类型重复相同的过程

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接