【发布时间】:2009-09-10 12:09:59
【问题描述】:
我刚刚开始在 Haskell 中玩耍。使用 Ruby 多年后,我习惯了 Ruby on Rails 或 Rugui 使用的文件组织。
有没有关于 Haskell 程序中文件组织的指南、最佳实践,甚至可能是框架?
(“Learn you a Haskell”和“Real World Haskell”并没有真正解决这个问题。)
【问题讨论】:
标签: haskell organization
我刚刚开始在 Haskell 中玩耍。使用 Ruby 多年后,我习惯了 Ruby on Rails 或 Rugui 使用的文件组织。
有没有关于 Haskell 程序中文件组织的指南、最佳实践,甚至可能是框架?
(“Learn you a Haskell”和“Real World Haskell”并没有真正解决这个问题。)
【问题讨论】:
标签: haskell organization
我知道这是一个非常古老的问题,但作为一个为此苦苦挣扎的初学者,我仍然没有找到令人满意的答案,而且关于如何布局项目的指导似乎很少。
这是我发现有用的。
基本上,项目布局是为了让我们了解在开发时从哪里开始,因此它与我们开发程序的方式密切相关。例如,在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 下写一个SomeType.hs,其中有一些广告。Error.hs 中写入有关SomeType 的相关错误
Instance 下由SomeType 编写Setter.hs 的实现
SomeType.hs的控制函数
Control下的逻辑
SomeType.hs下tests下的功能是什么
【讨论】:
haskell.org 定义了两种可能有用的文件和目录布局,以及一些工具指南。
【讨论】:
主要限制是分层模块名称必须具有分层目录布局。
所以 Data.Map.Fast 进入 Data/Map/Fast.hs
之后,将您的程序和库分解为逻辑单元,在单独的模块中,并让依赖关系解析根据需要解析模块。
【讨论】: