Question

Je travaille sur une bibliothèque d'optimisation basée sur le flux de données écrit en Haskell. Il semble maintenant probable que la bibliothèque va devoir être divisé en deux parties:

  • core pièce avec un minimum de dépendances de construction; appeler hoopl-core.

  • complet pièce, appelez hoopl, ce qui peut avoir des dépendances supplémentaires sur les paquets comme un prettyprinter, QuickCheck, et ainsi de suite.

L'idée est que le compilateur Glasgow Haskell ne dépendra que de hoopl-core, de sorte qu'il ne sera pas trop difficile pour l'amorçage du compilateur. D'autres compilateurs obtenir les goodies supplémentaires dans hoopl. Forfait hoopl dépendra hoopl-core.

Les outils de paquets Debian peuvent construire des paquets multiples à partir d'un seul arbre source. Malheureusement Cabal n'a pas encore atteint ce niveau de sophistication . Mais il doit y avoir d'autres concepteurs de bibliothèques ou d'application là-bas qui ont des problèmes similaires (par exemple, un paquet pour une bibliothèque de base, une autre pour une interface de ligne de commande, une autre pour une interface graphique).

Quelles sont les meilleures pratiques actuelles pour la construction et la gestion de plusieurs paquets Haskell liés à l'aide de Cabal?

Était-ce utile?

La solution

Je mettrais les deux paquets dans des sous-répertoires séparés, et ont un Makefile avec quelque chose comme ceci:

.PHONY: all hoopl hoop-core
all : hoopl

hoopl : hoopl-core
       cd hoopl && cabal build && cabal register --inplace

hoopl-core
       cd hoopl-core && cabal build && cabal register --inplace

cela suppose que vous avez le processus par un bootstrap premier bâtiment hoopl-core et l'enregistrer (--inplace), puis la construction hoopl. Vous pouvez automatiser plus de cela en utilisant le Makefile.

Comme vous le savez, quand nous voulions des fonctionnalités similaires pour GHC, nous avons écrit notre propre système de construction à la place ;-) Je ne recommande pas. Je suppose que techniquement il serait possible d'extraire du système de compilation GHC les pièces nécessaires et faire un cadre réutilisable, mais ...

Autres conseils

Mettre les deux paquets dans les sous-répertoires distincts de votre repo de contrôle de code source, et utiliser deux fichiers cabale séparés.

Assurez-vous d'utiliser l'opération de déplacement de votre système de contrôle de code source lorsque les fichiers en mouvement, de sorte qu'il retrace l'histoire correctement.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top