我应该如何为程序而非库命名我的Haskell模块,并且将它们按层次结构进行组织?
我正在制作一个称为光度的光线追踪器。首先,我有以下模块:
Vector Colour Intersect Trace Render Parse Export
每个模块本身都很好,但是我觉得这缺乏组织。
首先,我将每个模块放在
Luminosity
下,因此例如Vector
现在是Luminosity.Vector
(我假设这是haskell程序的标准吗?)。然后我想: vector 和颜色是独立的,可以重复使用,因此应该将它们分开。但是它们太小了,无法变成库。
他们应该去哪里? (在hackage上)已经有一个
Data.Vector
和Data.Colour
,所以我应该把它们放在那里吗?还是会引起困惑(即使我将它们与其他本地进口物分组在一起)也是如此?如果不存在,应该是Luminosity.Data.Vector
还是Data.Luminosity.Vector
?我很确定我已经看过两者,尽管也许我只是碰巧看着一个使用非常规结构的项目。我还有一个简单的TGA图像导出器(
Export
),它可以独立于亮度。看来正确的位置应该是Codec.Image.TGA
,但是同样,Luminosity
是否应该在某个地方?如果是,在哪里?如果Structure of a Haskell project或其他一些wiki对此进行了解释,那将是很好的。
最佳答案
我认为这是一个好举动。它向正在阅读代码的任何人阐明这些模块是专门为Luminosity
项目制作的。
如果编写模块是为了模拟或改进现有库,或者填补您认为缺少特定通用库的空白,那么在这种罕见情况下,请删除前缀并以通用名称命名。有关此示例,请参见pipes包如何导出Control.Monad.Trans.Free
,因为无论出于何种原因,作者对Free monad的现有实现都不满意。
如果您不创建单独的库,则可能将它们保留在Luminosity.Vector
和Luminosity.Colour
。如果您确实制作了单独的库,请尝试通过电子邮件向这些库的目标受众发送电子邮件,看看其他人如何认为这些库应被命名和分类。是否将它们拆分成单独的库完全取决于您,您认为这些单独的库可以为其他人带来多少 yield 完全取决于您。
关于haskell - Haskell模块命名约定,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/11594983/