Aprende a testar os teus exercícios de Haskell no Exercism
Executa o seguinte comando no diretório do teu exercício para correr os testes:
stack test
Para correr os testes sempre que guardares um ficheiro, usa antes este comando:
stack test --file-watch
No .cabal file found in directory
Provavelmente estás a usar uma versão antiga do stack e precisas de a atualizar.
No compiler found, expected minor version match with...
Try running "stack setup" to install the correct GHC...
Basta fazer o que diz e ele vai descarregar e instalar a versão correta do compilador:
stack setup
Uma solução para um exercício é um módulo Haskell. O nome do módulo é definido numa instrução de importação no conjunto de testes, normalmente no início:
import Test.Hspec (Spec, describe, it, shouldBe)
import Test.Hspec.Runner (configFailFast, defaultConfig, hspecWith)
import ModuleName (someFunc)
main :: IO ()
main ...
Neste exemplo, o ficheiro de testes importa, na linha 4, um módulo chamado
ModuleName, que exporta uma função chamada someFunc. Isto significa que tens
de criar um ficheiro chamado ModuleName.hs que seria algo como isto:
module ModuleName (someFunc) where
someFunc :: ...
someFunc ...
Vais encontrar um ficheiro com este nome já disponível em src/, que podes usar
como ponto de partida para a tua solução.
Tem apenas em conta que este stub está aí só para te ajudar a começar. Sente-te à vontade para o alterar por completo se achares que é o que deves fazer.
Se quiseres usar alguns pacotes para escrever uma solução mais elegante, começa
por adicionar os pacotes às dependências da tua solução no package.yaml:
library:
exposed-modules: ModuleName
source-dirs: src
dependencies:
- foo
- bar
Enquanto trabalhas localmente, podes usar os pacotes que quiseres. O executor de testes online, no entanto, só tem acesso a um conjunto limitado de pacotes. Os pacotes disponíveis são
base, containers, array, time, mtl, deepseq, exceptions, bytestring), maisSe submeteres uma solução que usa um pacote que não está disponível, o executor de testes vai deparar-se com a falta de acesso à internet e produzir um erro parecido com 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 ...)
Se quiseres experimentar a tua solução no GHCi, basta correr este comando:
stack ghci
Recomenda-se vivamente que corras o hlint na tua solução para ver se
deteta algo que te está a escapar:
hlint ModuleName.hs
Não tens de aceitar todas as sugestões dadas pelo hlint, mas normalmente
ajudam-te a aprender a escrever código Haskell bonito e idiomático.