我应该如何为程序而非库命名我的Haskell模块,并且将它们按层次结构进行组织?

我正在制作一个称为光度的光线追踪器。首先,我有以下模块:

Vector Colour Intersect Trace Render Parse Export

每个模块本身都很好,但是我觉得这缺乏组织。

首先,我将每个模块放在Luminosity下,因此例如Vector现在是Luminosity.Vector(我假设这是haskell程序的标准吗?)。

然后我想: vector 和颜色是独立的,可以重复使用,因此应该将它们分开。但是它们太小了,无法变成库。

他们应该去哪里? (在hackage上)已经有一个Data.VectorData.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.VectorLuminosity.Colour。如果您确实制作了单独的库,请尝试通过电子邮件向这些库的目标受众发送电子邮件,看看其他人如何认为这些库应被命名和分类。是否将它们拆分成单独的库完全取决于您,您认为这些单独的库可以为其他人带来多少 yield 完全取决于您。

关于haskell - Haskell模块命名约定,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/11594983/

10-11 08:07