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