Haskell中,模块、包和库有什么区别?

22

在Haskell中,模块(module)、包(package)和库(library)有什么区别?

http://www.haskell.org/ghc/docs/latest/html/libraries/base/Prelude.html
Prelude:一个标准的模块,默认导入到所有的Haskell模块中。

http://www.haskell.org/haskellwiki/Base_package
Base package:基础包含Prelude及其支持库,以及从数据结构到解析组合器和调试工具等一系列有用的

谢谢。

另请参见: What's the difference between a Python module and a Python package?


2
一个是一组模块,在语言报告中有解释,还包括版本和描述等数据。通常将主要用于其他项目的模块的包称为 - gspr
如果 library 只是另一个称呼为 package,那么当 ezyang 说 Cabal only supports a single public library per package 时是什么意思?来源 - Janus Troelsen
Haskell程序怎么样? - Adam
1个回答

26

模块是一组函数、类型、类等在一个公共名称空间中放在一起的集合。

是一组模块,这些模块在程序或其他库中使用时都有意义。

是可以包含库或可执行文件或两者的分发单元。这是与社区分享您的代码的一种方式。

请注意,库不必孤立地存在于包中。也就是说,在项目中使用的库不必在包外部。为了清晰和可维护性,将代码从其余部分分离出来是完全可以接受的。这也是隔离一些通用代码和业务逻辑代码的好方法,这个库最终可能会被提取并在项目之间或与社区共享。


2
一个包是否可以包含多个库?一个包是否可以同时包含内部和外部库中的不同模块?Backpack引入的签名和接口应该放在哪里? - Janus Troelsen
1
“packages are the things on Hackage” 的意思是“包是Hackage上的东西”。 - Adam

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接