OK, alors voici une simple question. J'ai écrit une fonction débogage :: string -> io () code>. J'aimerais donner des choses de sorte que lorsque je compile mon programme une solution, cette fonction écrit à l'erreur standard, et si je compile mon programme d'une autre manière, cette fonction devient no-op. Y a-t-il un interrupteur de compilation facile pour faire cela? Ou devrais-je devoir mettre en œuvre quelque chose moi-même? P>
3 Réponses :
Je ne pense pas que l'adoption de à la place, vous pouvez utiliser un prétraiteur pour désactiver / activer les messages de débogage. Placez ce qui suit dans un fichier séparé: p> le trace code> est la bonne approche pour résoudre ce problème.
{- # langue cpp # -} code> ligne active le pré-processus C pour le fichier actuel. Vous pouvez ensuite compiler le fichier avec / sans débogage en utilisant
ghc -ddebug code> ou juste
ghc code>. P> p> p>
Vous pouvez le faire à l'aide du préprocesseur du CPP et de Tout d'abord, utilisez Puis, ajoutez un drapeau à votre fichier Enfin, pour activer le débogage, actionnez le drapeau avec #Ifdef code>.
#Ifdef code> pour choisir entre les deux versions de la fonction. p>
.cabal code> pour le contrôler. p>
-f code> lors de la configuration: p>
Pour compléter les excellentes réponses données ici, je voudrais mentionner cette approche, au cas où les gens (comme moi) utilisent la dernière version de dans le fichier pile code> avec
hpack code> .
package.yaml code> J'ai ajouté ce qui suit: p>
stack build --flag "your-package:debug"
Avez-vous envisagé d'utiliser
débog.trace code>? Débogage Haskel donne un peu de détail décent.
@Devnull
trace code> ne fera pas ce que je veux - mais
traceio code> pourrait ...