Bootstraping - Preparando o Ambiente


Playlists

1 Preparando o ambiente

1.1 Instalando o Haskell Stack

1.2 Primeiro projeto compilável

  • Para criar projetos, utilizaremos a ferramenta stack. Essa ferramenta cria um ambiente isolado
$ stack new primeiro-projeto simple
$ cd primeiro-projeto
$ stack setup
$ stack build
$ stack exec primeiro-projeto

Os dois últimos comandos são referentes a compilação do projeto e execução.

1.3 Stack

O stack cria a seguinte estrutura de diretório:

  • LICENSE: informação sobre a licença de uso do software.
  • README.md: informações sobre o projeto em formato Markdown.
  • Setup.hs: retrocompatibilidade com o sistema cabal.
  • primeiro-projeto.cabal: informações das dependências do projeto. Atualizado automaticamente pelo stack.

1.4 Stack

  • stack.yaml: parâmetros do projeto
  • package.yaml: configurações de compilação e dependências de bibliotecas externas.
  • src/Main.hs: arquivo principal do projeto.

1.5 Main.hs

module Main where   -- indica que é o módulo principal

main :: IO ()
main = do                  -- início da função principal
  putStrLn "hello world"   -- imprime hello world

1.6 Flags de compilador

  • Para indicar as flags de compilação que você quer usar no projeto, edite o arquivo nomeprojeto.cabal e na seção executable acrescente a linha:
ghc-options:  flags

1.7 Flags de compilador

  • Um conjunto de flags bastante comum é para ligar as opções RTS, habilitar todos os avisos, permitir multithread e habilitar otimização:
ghc-options:  -rtsopts -Wall -threaded -O2

Outras opções estão disponíveis no site GHC Flags.

1.8 Projetos com múltiplos códigos-fonte

Caso seu projeto seja organizado com múltiplos arquivos, será preciso seguir algumas regras:

  • O nome do módulo tem que ser o mesmo da composição do diretório e nome do arquivo.
  • Deve incluir o nome do módulo no arquivo .cabal incluindo a opção other-modules: Modulo.

1.9 Projetos com múltiplos códigos-fonte

Se sua estrutura de diretório está da seguinte forma:

src/Main.hs
src/Modulo.hs
src/Util/Modulo2.hs

Os nomes dos módulos deverão ser Main, Modulo e Util.Modulo2, respectivamente. O arquivo .cabal deve conter other-modues: Modulo, Util.Modulo2.

1.10 Bibliotecas externas

Para incluir bibliotecas externas em seu projeto, acrescente a linha build-depends: biblioteca no seu arquivo .cabal:

build-depends: base, random, mtl

Os módulos disponíveis podem ser encontrados no Hackage e no Stackage.

1.11 Bibliotecas Externas

Para determinar a versão da biblioteca basta escrever a restrição logo após o nome: base >= 4.7 && < 5.

1.12 Versão do compilador

Se você quiser especificar a versão do compilador, edite o arquivo stack.yaml e altere o valor do campos resolver seguindo a numeração em Stackage.

1.13 Buscando funções

No site Hoogle você pode buscar por funções existentes em qualquer biblioteca publicada no Hackage tanto pelo nome, como pela assinatura.

Experimentem buscar por (a -> b) -> [a] -> [b].

1.14 Instalando o Haskell Language Server

1.15 Instalando o Windows Subsystem for Linux

Para os Windowzeiros de plantão!

2 Editores

Em ordem alfabética (e em ordem do melhor para o pior 🤣)

2.1 Emacs

A melhor escolha!

2.2 Vim

If you must…

3 Disclaimer

Estes slides foram preparados para os cursos de Paradigmas de Programação e Desenvolvimento Orientado a Tipos na UFABC.

Este material pode ser usado livremente desde que sejam mantidos, além deste aviso, os créditos aos autores e instituições.