2013-03-03 17 views
48

Gibt es eine Menge von Cabal-Paketen, die automatisch eine Teilmenge unabhängiger Pakete berechnen? Mit anderen Worten, eine Teilmenge von Paketen, die ausreicht, um sie alle zu installieren.Unabhängige Teilmenge von Cabal-Paketen

Für [network,parsec] die Antwort [network] weil es network auf parsec abhängt.

Für [network,containers] die Antwort [network,containers] weil:

  • network nicht auf containers
  • alle network s Abhängigkeiten hängt hängt nicht von containers
  • containers hängt nicht von network
  • alle containers s Abhängigkeiten nicht abhängig von network

Es ist nicht schwer, die Antwort für 2 Pakete zu finden. Was wirklich interessant ist, ist herauszufinden, unabhängig Set für [containers, directory, filepath, lens, xml, http-conduit, regex-posix, monad-control, unordered-containers, glib, hashable, hspec, split, aeson, attoparsec, stm, QuickCheck].


Von Antwort erwarte ich eine Funktion basierend auf Kabale Bibliothek wie ∷ [Packages] → IO [Packages].

+2

Sieht aus wie 'Distribution.Client.PackageIndex.dependencyClosure' ist, was Sie brauchen. –

+0

Meinst du ['Distribution.Simple.PackageIndex.dependencyClosure'] (http://hackage.haskell.org/packages/archive/Cabal/latest/doc/html/Distribution-Simple-PackageIndex.html#v:dependencyClosure) ? –

+1

Die Git-Version von cabal-install ('Distribution.Client. *') Ist jetzt auch eine Bibliothek. –

Antwort

1

Cabal bewegt sich zu einem mehr NPM-ähnlichen Modell, das die Auflösung der Abhängigkeit viel einfacher macht. Jedes installierte Paket behält eine lokale Kopie seiner Abhängigkeiten und tauscht einen kleinen Speicherplatz für die Installation mehrerer globaler Pakete mit sich gegenseitig ausschließenden Paketversionsanforderungen.

Unter diesem Modell ist die Teilmenge von Paketen erforderlich, um eine Reihe von Paketen == zu installieren, die festgelegt werden. Obwohl eine davon abhängig sein kann, behält jede installierte Kopie ihre eigene lokale Kopie ihrer Abhängigkeiten, sodass Cabal die auf diese Weise installierte Abhängigkeit nicht mehr berücksichtigt.

+0

Wo (a -> b) bedeutet "a" hängt von "b" ab, was passiert, wenn Sie 'a' installieren (a -> b-0.9) und' d' wo (d -> b-1,5).'a' und' d' legen beide Arten von b offen, aber die Typen haben sich von b-0,9 zu b-1.5 verändert? Ich weiß, wie ghc das jetzt handhabt, sie arbeiten einfach nicht zusammen, da sie unterschiedliche Typen sind, sogar wenn sie implementiert werden, bleibt das gleiche ghc sicher und behandelt sie als verschieden, da sie aus verschiedenen Versionen stammen. Wie geht NPM mit diesem Problem um? – Davorak

+0

Hoffentlich werden die beteiligten Haskell-Datentypen/Node.js-Klassen nur von Low-Level-Abhängigkeiten verwendet, nicht von der App insgesamt. In Node.js können Klassen lokal definiert werden. Dies sollte kein Problem darstellen, es sei denn, die Anwendung versucht, Objekte mit unterschiedlichen Bibliotheken mit unterschiedlichen Klassendefinitionen zu kommunizieren. Das gleiche gilt für Haskell, glaube ich. – mcandre

Verwandte Themen