Aprenda a testar seus exercícios de Haskell no Exercism
Execute o comando a seguir no diretório do exercício para rodar os testes:
stack test
Para rodar os testes a cada vez que você salvar um arquivo, use este comando:
stack test --file-watch
No .cabal file found in directory
Provavelmente você está usando uma versão antiga do stack e precisa atualizá-la.
No compiler found, expected minor version match with...
Try running "stack setup" to install the correct GHC...
É só fazer o que ela diz, e a versão correta do compilador será baixada e instalada:
stack setup
A solução de um exercício é um módulo Haskell. O nome do módulo é definido em uma instrução de importação na suíte de testes, geralmente no começo:
import Test.Hspec (Spec, describe, it, shouldBe)
import Test.Hspec.Runner (configFailFast, defaultConfig, hspecWith)
import ModuleName (someFunc)
main :: IO ()
main ...
Neste exemplo, o arquivo de teste importa, na linha 4, um módulo chamado
ModuleName, que exporta uma função chamada someFunc. Isso significa que
você precisa criar um arquivo chamado ModuleName.hs mais ou menos assim:
module ModuleName (someFunc) where
someFunc :: ...
someFunc ...
Você vai encontrar um arquivo com esse nome já pronto em src/,
que você pode usar como ponto de partida para a sua solução.
Só tenha em mente que esse esboço está ali apenas para você começar. Fique à vontade para mudá-lo por completo se achar que é a coisa certa a fazer.
Se você quiser usar alguns pacotes para escrever uma solução mais elegante,
primeiro adicione os pacotes às dependências da sua solução em package.yaml:
library:
exposed-modules: ModuleName
source-dirs: src
dependencies:
- foo
- bar
Enquanto trabalha localmente, você pode usar quaisquer pacotes que quiser. O executor de testes on-line, no entanto, tem acesso apenas a um conjunto limitado de pacotes. Os pacotes disponíveis são
base, containers, array, time, mtl, deepseq, exceptions, bytestring), maisSe você enviar uma solução que usa um pacote que não está disponível, o executor de testes vai esbarrar na 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 você quiser brincar com a sua solução no GHCi, basta rodar o comando:
stack ghci
É altamente recomendável que você rode o hlint na sua solução para ver se ele
detecta algo que você deixou passar:
hlint ModuleName.hs
Você não precisa aceitar todas as sugestões do hlint, mas normalmente
elas ajudam você a aprender a escrever um código Haskell bonito e idiomático.