2016-02-10 4 views
1

J'ai un projet où je veux utiliser readCreateProcess (j'ai besoin de la possibilité de passer une commande au shell par défaut avec une entrée et de lire sa sortie).Comment importer une version spécifique d'un module

Cependant, cette fonction a seulement été ajoutée dans le processus-1.2.3 et plusieurs autres paquets que j'utilise (toutes les versions les plus récentes) nécessitent process <=1.2.

Je me demandais si je pouvais importer readCreateProcess à partir du paquet le plus récent tout en utilisant les autres paquets. J'utilise ghc/cabal pour construire et tester, si cela est pertinent.

+0

[Question connexe] (http://stackoverflow.com/questions/6526353/package-versioning-clashes-in-cabal) (si non dupliqué). – leftaroundabout

+1

Vous pouvez penser que réimplémenter 'readCreateProcess' vous-même est douloureux; vous pouvez penser que la mise à jour de vos dépendances pour travailler avec 'process-1.2.3' est douloureuse; mais ce ne sont que des hangnails - des douleurs ponctuelles qui se terminent rapidement et ne refont surface jamais - par rapport à l'appendicite d'avoir deux versions du même paquet dans votre arbre de dépendance - une bombe à retardement aléatoire et imprévisible qui vous handicape complètement au pire moment possible. –

+0

@Daniel Je me rends compte des risques, mais je pensais pouvoir importer et réexporter à partir d'un petit module uniquement utilisé à cette fin. Je n'ai pas non plus besoin de l'utiliser en conjonction avec d'autres fonctions, je l'utilise effectivement comme une chaîne de boîte noire, fonction de sortie de chaîne. –

Répondre

1

Je me suis rendu compte que le plus rapide serait de fourcher process-1.4. J'ai ensuite renommé le paquet processnew et tous les fichiers au sein de System.ProcessNew et System.CmdNew. Je l'ai ensuite configuré en tant que sous-module.

J'ai ensuite installé ce paquet, ajouté processnew >= 1.4 à mon .cabal, et importé System.ProcessNew(readCreateProcess, shell).