2013-03-03 1 views
48

Учитывая набор пакетов cabal, существует ли способ автоматически рассчитывать подмножество независимых пакетов? Другими словами, подмножество пакетов, которое будет достаточным для их установки.Независимое подмножество комплектов для кабальных комплектов

Для [network,parsec] ответ [network], потому что network зависит от parsec.

Для [network,containers] ответ [network,containers] потому что:

  • network не зависит от containers
  • все network сек зависимостей не зависит от containers
  • containers не зависит от network
  • всех containers с зависимости не зависит от network

Нетрудно найти ответ на 2 пакета. Что действительно интересно, так это узнать независимый набор для [containers, directory, filepath, lens, xml, http-conduit, regex-posix, monad-control, unordered-containers, glib, hashable, hspec, split, aeson, attoparsec, stm, QuickCheck].


От ответа я ожидаю, некоторые функции на основе Кабал библиотеки как ∷ [Packages] → IO [Packages].

+2

Похоже, что 'Distribution.Client.PackageIndex.dependencyClosure' - это то, что вам нужно. –

+0

Вы имеете в виду ['Distribution.Simple.PackageIndex.dependencyClosure'] (http://hackage.haskell.org/packages/archive/Cabal/latest/doc/html/Distribution-Simple-PackageIndex.html#v:dependencyClosure) ? –

+1

Git версия cabal-install ('Distribution.Client. *') Также является библиотекой. –

ответ

1

Cabal переходит к модели, подобной NPM, что значительно упростит разрешение зависимостей. Каждый установленный пакет будет хранить локальную копию своих зависимостей, торгуя небольшим дисковым пространством для головной боли при установке нескольких глобальных пакетов с требованиями обоюдного исключения версий пакетов.

В соответствии с этой моделью подмножество пакетов, необходимых для установки набора пакетов ==, который установлен. Хотя каждый из них может быть зависимым от другого, каждая установленная копия будет хранить свою собственную локальную копию своих зависимостей, поэтому Cabal больше не будет рассматривать зависимость, установленную таким образом.

+0

Где (a -> b) означает 'a' зависит от' b'. что происходит, когда вы устанавливаете 'a' где (a -> b-0.9) и' d' где (d -> b-1.5).'a' и' d' отображают типы типа b, но типы изменились с b-0.9 на b-1.5? Я знаю, как ghc справляется с этим сейчас, они просто не взаимодействуют, так как они разные, на самом деле, даже когда они реализованы, тот же ghc остается в безопасности и рассматривает их как разные, поскольку они поступают из разных версий. Как NPM справляется с этой проблемой? – Davorak

+0

Надеемся, что используемые типы данных Haskell/Node.js используются только для низкоуровневых зависимостей, а не для приложения в целом. В Node.js классы могут быть определены локально, поэтому это не должно быть проблемой, если приложение не пытается связывать объекты с разными библиотеками с разными определениями классов. То же самое касается Хаскелла, я полагаю. – mcandre

 Смежные вопросы

  • Нет связанных вопросов^_^