除了可能通过其他方式解决的潜在名称冲突 - 从您需要的模块中仅导入部件是否有任何好处:
import SomeModule (x, y, z)
Run Code Online (Sandbox Code Playgroud)
...只是导入所有这些,这更简洁,更容易维护:
import SomeModule
Run Code Online (Sandbox Code Playgroud)
例如,它会使二进制文件更小吗?
Ear*_*ine 11
名称冲突和二进制大小优化只是您可以获得的两个好处.实际上,始终确定您希望从代码的外部世界获得什么是一种很好的做法.因此,每当人们查看您的代码时,他们就会知道您的代码究竟是什么.
这也为您提供了一个非常好的机会来创建测试的模拟解决方案,因为您可以处理导入列表并为它们编写模拟.
不幸的是,在Haskell中,类型类实例并不那么容易.它们是隐式导入的,因此可能会产生冲突,也可能使模拟变得更难,因为无法仅指定特定的类实例.希望这可以在未来版本的Haskell中修复.
UPDATE
我上面列出的好处(代码维护和测试模拟)不仅限于Haskell.实际上,正如我所知,它也是Java中的常见做法.在Java中,您只需导入一个类,甚至一个静态变量/方法.不幸的是,您仍然无法有选择地导入成员函数.
不,这只是为了防止名字冲突.防止名称冲突的另一种机制 - 即import qualified- 导致更详细(不太可读)的代码.
它不会使二进制文件更小 - 考虑到给定模块中的函数通常都相互引用,因此需要将它们编译在一起.