2017-10-12 7 views
4

Je travaille sur une application de haskell qui appelle un service Web. Je voudrais que lors de la construction avec stack build l'application cible l'URL du serveur de production réel, mais que lors du débogage avec stack repl l'application cible l'URL d'un serveur de test.Basculer entre l'environnement de production et l'environnement de bac à sable avec la pile haskell

Je suppose que cela peut être réalisé avec une compilation conditionnelle, mais comment configurer la pile pour passer une option telle que -DDEBUG=1 à GHCi mais pas à GHC? De manière plus générale, de nombreux outils (Visual Studio, Xcode ...) prennent en charge plusieurs configurations de construction pour un projet. Y a-t-il une pile ou un équivalent de cabale?

Répondre

3

Une façon de procéder consiste à vérifier à l'exécution si System.Environment.getProgName est ghc. Ce n'est pas nécessairement une vérification fiable, car l'exécutable pourrait dans certains cas être appelé autre chose. Il s'agira de ghc pour les exécutables installés en pile, mais pour les systèmes installés, il peut très bien s'agir de ghc-8.0.1 ou de quelque chose. Donc, cette approche n'est pas tout à fait fiable.

Une meilleure approche est apparue pour moi, qui est d'ajouter un fichier .ghci, qui contient des commandes pour que ghci s'exécute au démarrage. Je n'ai pas testé cela, mais je pense que cela fonctionnerait pour mettre :set -DDEBUG=1 dans .ghci dans votre racine de projet. Devra également besoin de modifier ses autorisations avec chmod go-w .ghci.

+0

Je ne connaissais pas les fichiers '.ghci'. J'ai juste essayé votre suggestion et cela fonctionne. Merci beaucoup! – Pascal91