Apprends à tester tes exercices Haskell sur Exercism
Exécute la commande suivante dans le répertoire de ton exercice pour lancer les tests :
stack test
Pour exécuter les tests à chaque sauvegarde de fichier, exécute plutôt cette commande :
stack test --file-watch
No .cabal file found in directory
Tu utilises probablement une ancienne version de stack et tu dois la mettre à niveau.
No compiler found, expected minor version match with...
Try running "stack setup" to install the correct GHC...
Fais simplement ce qu'il indique et il téléchargera et installera la bonne version du compilateur :
stack setup
La solution d'un exercice est un module Haskell. Le nom du module est défini dans une instruction d'import dans la suite de tests, généralement au début :
import Test.Hspec (Spec, describe, it, shouldBe)
import Test.Hspec.Runner (configFailFast, defaultConfig, hspecWith)
import ModuleName (someFunc)
main :: IO ()
main ...
Dans cet exemple, le fichier de test importe, à la ligne 4, un module nommé ModuleName, qui exporte une fonction nommée someFunc. Cela signifie que tu dois créer un fichier nommé ModuleName.hs qui ressemblerait à ceci :
module ModuleName (someFunc) where
someFunc :: ...
someFunc ...
Tu trouveras un fichier portant ce nom déjà en place dans src/, que tu peux utiliser comme point de départ pour ta solution.
Garde simplement à l'esprit que ce squelette est là juste pour te permettre de démarrer. N'hésite pas à le modifier complètement si tu penses que c'est la bonne chose à faire.
Si tu veux utiliser des paquets pour écrire une solution plus élégante, ajoute d'abord les paquets aux dépendances de ta solution dans package.yaml :
library:
exposed-modules: ModuleName
source-dirs: src
dependencies:
- foo
- bar
Lorsque tu travailles en local, tu peux utiliser tous les paquets que tu veux. L'exécuteur de tests en ligne, cependant, n'a accès qu'à un ensemble limité de paquets. Les paquets disponibles sont
base, containers, array, time, mtl, deepseq, exceptions, bytestring), plusSi tu soumets une solution qui utilise un paquet non disponible, l'exécuteur de tests se heurtera à son absence d'accès à internet et produira une erreur qui ressemble à ceci :
Cabal file info not found for unavailable-package-1.0@..., updating
Selected mirror https://hackage.haskell.org/
Downloading root
HttpExceptionRequest Request {
host = "hackage.haskell.org"
...
}
(ConnectionFailure ...)
Si tu veux tester ta solution dans GHCi, exécute simplement la commande :
stack ghci
Il est fortement recommandé d'exécuter hlint sur ta solution pour voir s'il détecte quelque chose qui t'échappe :
hlint ModuleName.hs
Tu n'es pas obligé d'accepter toutes les suggestions de hlint, mais en général elles t'aideront à apprendre à écrire du code Haskell beau et idiomatique.