Scopri come testare i tuoi esercizi di Haskell su Exercism
Esegui il comando seguente nella directory dell'esercizio per eseguire i test:
stack test
Per eseguire i test a ogni salvataggio di file, usa invece questo comando:
stack test --file-watch
No .cabal file found in directory
Probabilmente stai usando una versione vecchia di stack e devi aggiornarla.
No compiler found, expected minor version match with...
Try running "stack setup" to install the correct GHC...
Fai come dice: scaricherà ed installerà la versione corretta del compilatore:
stack setup
La soluzione di un esercizio è un modulo Haskell. Il nome del modulo è definito in un'istruzione di import nella suite di test, di solito all'inizio:
import Test.Hspec (Spec, describe, it, shouldBe)
import Test.Hspec.Runner (configFailFast, defaultConfig, hspecWith)
import ModuleName (someFunc)
main :: IO ()
main ...
In questo esempio, il file di test importa, alla riga 4, un modulo chiamato
ModuleName, che esporta una funzione chiamata someFunc. Questo significa che
devi creare un file chiamato ModuleName.hs simile a questo:
module ModuleName (someFunc) where
someFunc :: ...
someFunc ...
Troverai un file con questo nome già presente in src/, che puoi usare come
punto di partenza per la soluzione.
Tieni solo presente che questo stub serve solo a iniziare. Sentiti libero di modificarlo completamente se pensi che sia la cosa giusta da fare.
Se vuoi usare dei pacchetti per scrivere una soluzione più elegante, aggiungi
prima i pacchetti alle dipendenze della soluzione in package.yaml:
library:
exposed-modules: ModuleName
source-dirs: src
dependencies:
- foo
- bar
Mentre lavori in locale, puoi usare tutti i pacchetti che vuoi. Il test runner online, invece, ha accesso solo a un insieme limitato di pacchetti. I pacchetti disponibili sono
base, containers, array, time, mtl, deepseq, exceptions, bytestring), piùSe invii una soluzione che usa un pacchetto non disponibile, il test runner si imbatterà nella sua mancanza di accesso a internet e produrrà un errore simile a questo:
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 ...)
Se vuoi giocare con la soluzione in GHCi, esegui semplicemente il comando:
stack ghci
È altamente consigliato eseguire hlint sulla soluzione per vedere se
individua qualcosa che ti è sfuggito:
hlint ModuleName.hs
Non devi accettare tutti i suggerimenti di hlint, ma di solito
ti aiuteranno a imparare a scrivere codice Haskell bello ed idiomatico.