Aprende a probar tus ejercicios de Haskell en Exercism
Ejecuta el siguiente comando en el directorio de tu ejercicio para ejecutar los tests:
stack test
Para ejecutar los tests cada vez que guardes un fichero, usa este otro comando:
stack test --file-watch
No .cabal file found in directory
Es probable que estés usando una versión antigua de stack y necesites actualizarla.
No compiler found, expected minor version match with...
Try running "stack setup" to install the correct GHC...
Haz lo que dice y descargará e instalará la versión correcta del compilador:
stack setup
La solución de un ejercicio es un módulo de Haskell. El nombre del módulo se define en una instrucción import de la suite de tests, normalmente al principio:
import Test.Hspec (Spec, describe, it, shouldBe)
import Test.Hspec.Runner (configFailFast, defaultConfig, hspecWith)
import ModuleName (someFunc)
main :: IO ()
main ...
En este ejemplo, el fichero de tests importa, en la línea 4, un módulo llamado
ModuleName, que exporta una función llamada someFunc. Esto significa que
tienes que crear un fichero llamado ModuleName.hs que sea algo así:
module ModuleName (someFunc) where
someFunc :: ...
someFunc ...
Encontrarás un fichero con este nombre ya en src/,
que puedes usar como punto de partida para tu solución.
Ten en cuenta que este stub está ahí únicamente para que puedas empezar. No dudes en cambiarlo por completo si crees que es lo correcto.
Si quieres usar algunos paquetes para escribir una solución más elegante,
primero añade los paquetes a las dependencias de tu solución en package.yaml:
library:
exposed-modules: ModuleName
source-dirs: src
dependencies:
- foo
- bar
Mientras trabajas en local, puedes usar los paquetes que quieras. El test runner en línea, sin embargo, solo tiene acceso a un conjunto limitado de paquetes. Los paquetes disponibles son
base, containers, array, time, mtl, deepseq, exceptions, bytestring), másSi envías una solución que usa un paquete que no está disponible, el test runner se topará con su falta de acceso a internet y mostrará un error como este:
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 quieres experimentar con tu solución en GHCi, ejecuta este comando:
stack ghci
Te recomendamos encarecidamente que ejecutes hlint sobre tu solución para ver si
detecta algo que se te ha pasado:
hlint ModuleName.hs
No tienes que aceptar todas las sugerencias que te dé hlint, pero normalmente
te ayudarán a aprender a escribir código Haskell bonito e idiomático.