Какая разница между модулем, пакетом и библиотекой в ​​Haskell?

В чем разница между модулем, пакетом и библиотекой в ​​Haskell?

От http://www.haskell.org/ghc/docs/latest/html/libraries/base/Prelude.html
Prelude: стандартный модуль, импортированный по умолчанию во все модули Haskell.

От http://www.haskell.org/haskellwiki/Base_package
Базовый пакет: базовый пакет содержит Prelude и его библиотеки поддержки и большой набор полезных библиотек, начиная от структур данных и заканчивая компиляторами и утилитами отладки.

Спасибо.

См. также: В чем разница между модулем Python и пакетом Python?

Ответ 1

A модуль - это набор функций, типов, классов,... объединенных в общем пространстве имен.

A library - это набор модулей, который имеет смысл быть вместе и может использоваться в программе или другой библиотеке.

A package - это единица распространения, которая может содержать библиотеку или исполняемый файл или и то, и другое. Это способ поделиться своим кодом с сообществом.

Обратите внимание, что библиотека не должна быть изолирована в пакете. То есть, вполне приемлемо иметь библиотеку в вашем проекте, которая используется внутри этого проекта. Поэтому код ясен от остальных для ясности и ремонтопригодности. Это также хороший способ изолировать некоторые общие цели от вашего кода бизнес-логики, и эта библиотека в конечном итоге может быть извлечена и передана между проектами или сообществом, если это необходимо.