2010-04-25 18 views
30

En ce qui concerne la façon dont les paquets sont créés, installés et utilisés dans Haskell, quelle est la relation entre ghc-pkg et cabal?Quelle est la relation entre ghc-pkg et cabal?

Quels sont leurs rôles - quand utiliseriez-vous l'un par rapport à l'autre ou utilisez-vous les deux? S'agit-il d'outils complémentaires, d'outils concurrentiels ou simplement d'outils qui effectuent différents travaux?

Répondre

23

Graphiquement, les dépendances sont:

Packages GHC can use 
    | 
Are registered with "ghc-pkg register" 
    | 
And (almost always) built with Cabal 
    | 
With build dependencies resolved by cabal-install 
    | 
From Hackage. 
+0

Est-il donc vrai que tout paquet avec GHC-enregistrable pkg doit avoir été construit avec Cabal? –

+3

Non, ce n'est pas vrai. Dans les mauvais jours il n'y avait pas de Cabale, et nous avons enregistré tous nos forfaits avec make. les scripts 'make register' ont abondé. Voir 'ghc-pkg register' –

8

ghc-pkg est une interface directe à la base de données de paquets de GHC. Cabal est un outil qui fournit une structure de distribution cohérente pour les packages et un moyen de spécifier des métadonnées telles que les dépendances entre les packages, les numéros de version et les informations de génération. Utiliser Cabal pour installer un paquet l'enregistrera avec ghc (entre autres choses), mais c'est l'étendue du chevauchement, vraiment. Notez que ghc-pkg fournit également des fonctionnalités qui, pour autant que je sache, ne le sont pas, comme cacher des paquets installés.