lib*_*ako 5 haskell module file
GHC坚持认为模块名称必须等于文件名.但如果它们是相同的,那么为什么Haskell编译器需要两者?对我来说似乎多余.这只是语言设计错误吗?
除了不方便之外,它还引发了一个问题,即如果我想使用2个意外具有相同顶级模块名称的库,那么我就不能简单地通过重命名其中一个文件夹来消除歧义.这个问题的惯用解决方案是什么?
Haskell语言规范不讨论文件.它只讨论模块及其语法.所以显然没有语言设计错误.
GHC编译器(以及许多其他编译器)选择遵循每个文件一个模块的模式,并在具有匹配名称的文件中搜索模块.对我来说似乎是一个体面的策略.否则,您需要为编译器提供从模块名称到文件名的一些映射,或者使用的每个文件的显式列表.
lib*_*ako -3
Haskell 语言规范要求模块由模块头启动,并且没有提及文件 - 它为实现编译器留下了关于文件的完全自由。因此 Haskell 语言缺乏表达包含模块的文件所在位置的能力。因此,一些编译器 [包括最重要的编译器:GHC] 使用一种简单的解决方案:模块的名称必须与从包含目录到文件的路径匹配。这就引入了冗余。
为了避免冗余,编译器可以删除语言规范中通过标头启动每个模块的要求。然而,他们选择不这样做只是为了确认规范。也许 GHC 语言扩展可以做到这一点,但目前还没有这样的扩展。
所以这个问题是一个语言设计错误,并且作为遗留问题继续存在。
为了解决独立库之间可能出现的名称冲突,GHC 扩展包限定的导入似乎是最好的方法。