【发布时间】:2012-07-20 15:40:21
【问题描述】:
我应该如何为程序而不是库命名我的 Haskell 模块,并按层次结构组织它们?
我正在制作一个名为 Luminosity 的光线追踪器。首先我有这些模块:
Vector Colour Intersect Trace Render Parse Export
每个模块都很好,但我觉得这缺乏组织。
首先,我将每个模块都放在Luminosity 下,例如Vector 现在是Luminosity.Vector(我认为这是haskell 程序的标准?)。
然后我想:Vector和Color是独立的,可以复用,所以应该分开。但是它们太小了,不能变成图书馆。
他们应该去哪里?已经有(在hackage上)Data.Vector和Data.Colour,我应该把它们放在那里吗?或者这会导致混淆(即使我将它们与其他本地进口组合进口)?如果没有,应该是Luminosity.Data.Vector 还是Data.Luminosity.Vector?我很确定我已经看到两者都使用过,尽管我可能只是碰巧看到了一个使用非常规结构的项目。
我还有一个简单的 TGA 图像导出器 (Export),它可以独立于 Luminosity。看起来正确的位置应该是Codec.Image.TGA,但同样,Luminosity 应该在某个地方吗?如果是,在哪里?
如果Structure of a Haskell project 或其他 wiki 对此进行解释,那就太好了。
【问题讨论】:
-
如果您想制作可重用的代码,请将其打包到库中。大小无关紧要。
-
可见几何基元的可重用模块 - 具有代数类型,向量和颜色非常容易定义,以至于 Haskeller 想要定义自己的而不是依赖另一个库。然后他们可以控制他们的表现,而不必担心依赖问题(API 更改、作者失踪等)
标签: haskell module functional-programming naming-conventions code-organization