Playlists
A preparação do ambiente do Haskell incluindo compilador (GHC), o language server (Haskell Language Server - HLS), o Haskell Tool Stack e algumas ferramentas ancilares (Cabal, …) pode ser feita utilizando uma única ferramenta chamada GHCup.
O GHCUp funciona tanto no Linux quanto no macOS, FreeBSD ou no Windows através do WSL2 (https://youtu.be/U7gdzYiFJKg).
Vá até a página do GHCup https://www.haskell.org/ghcup/ e copie a linha de instalação e cole no seu terminal:
$ curl --proto '=https' --tlsv1.2 -sSf https://get-ghcup.haskell.org | sh
Você deve ver uma saída parecida com a abaixo:
$ curl --proto '=https' --tlsv1.2 -sSf https://get-ghcup.haskell.org | sh
Welcome to Haskell!
This script can download and install the following binaries:
* ghcup - The Haskell toolchain installer
* ghc - The Glasgow Haskell Compiler
* cabal - The Cabal build tool for managing Haskell software
* stack - A cross-platform program for developing Haskell projects (similar to cabal)
* hls - (optional) A language server for developers to integrate with their editor/IDE
ghcup installs only into the following directory,
which can be removed anytime:
/home/dummy/.ghcup
Press ENTER to proceed or ctrl-c to abort.
Note that this script can be re-run at any given time.
Aceitando-se continuar (ENTER
), o instalador vai então perguntar se
você quer instalar cada uma das ferramentas e sobre algumas
configurações. Abaixo cada uma delas e suas opções:
-------------------------------------------------------------------------------
Detected bash shell on your system...
Do you want ghcup to automatically add the required PATH variable to "/home/dummy/.bashrc"?
[P] Yes, prepend [A] Yes, append [N] No [?] Help (default is "P").
Você muito provavelmente quer permitir que o GHCup faça as alterações
no seu script de inicialização do seu shell. Na dúvida permita ou
escolhendo P
o simplesmente presionando ENTER
(opção default).
-------------------------------------------------------------------------------
Do you want to install haskell-language-server (HLS)?
HLS is a language-server that provides IDE-like functionality
and can integrate with different editors, such as Vim, Emacs, VS Code, Atom, ...
Also see https://haskell-language-server.readthedocs.io/en/stable/
[Y] Yes [N] No [?] Help (default is "N").
O GHCup não escolhe a instalação do Haskell Language server por
padrão. Se você não sabe o que está fazendo escolha Y
, para que o
HLS seja instalado. Note que o default é não instalar o HLS.
Alguns editores de texto como VSCode são capazes de baixar o HLS automaticamente, mas não tem nenhum problema você permitir que o GHCup já faça isso agora.
-------------------------------------------------------------------------------
Do you want to enable better integration of stack with GHCup?
This means that stack won't install its own GHC versions, but uses GHCup's.
For more information see:
https://docs.haskellstack.org/en/stable/yaml_configuration/#ghc-installation-customisation-experimental
If you want to keep stacks vanilla behavior, answer 'No'.
[Y] Yes [N] No [?] Help (default is "Y").
Sim! Você quer. Responda Y
ou apenas pressione ENTER
(opção default).
System requirements
Please ensure the following distro packages are installed before continuing (you can exit ghcup and return at any time): build-essential curl libffi-dev libffi8 libgmp-dev libgmp10 libncurses-dev pkg-config
Press ENTER to proceed or ctrl-c to abort.
Installation may take a while.
Em seguida o GHCup avisa que alguns pacotes da sua distribuição precisam ser instalados manualmente. o GHCup não os instala, você precisa fazer isso por conta própria!
Abra outra janela do seu terminal e instale os pacotes sugeridos, conforme abaixo (exemplo compatível com distros Debian/Ubuntu/Mint. Adapte o comando para a sua distribuição):
$ sudo apt install build-essential curl libffi-dev libffi8 libgmp-dev libgmp10 libncurses-dev pkg-config
Neste ponto o GHCup vai começar a fazer a sua mágica. Isso pode levar um tempinho a depender da sua conexão com a internet e do desempenho da sua própria máquina.
Com a instalação concluida, reinicie o terminal para carregar as novas
configurações, ou simplesmente execute o comando . ~/.ghcup/env
para
carregá-las. As ferramentas stack
, cabal
, ghc
, ghci
, … já
devem estar no PATH
e prontas para o uso. Siga o exemplo de um
projeto simples na seção seguinte para testar o seu ambiente.
Também veja informações complementares aqui: https://www.haskell.org/get-started/
$ 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.
O stack cria a seguinte estrutura de diretório:
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
ghc-options: flags
ghc-options: -rtsopts -Wall -threaded -O2
Outras opções estão disponíveis no site GHC Flags.
Caso seu projeto seja organizado com múltiplos arquivos, será preciso seguir algumas regras:
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.
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.
Para determinar a versão da biblioteca basta escrever a restrição logo após o nome: base >= 4.7 && < 5
.
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.
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]
.
Em ordem alfabética (e em ordem do melhor para o pior 🤣)
A melhor escolha!
If you must…
Para utilizar o Haskell com o VSCode, basta instalar o plugin do HLS https://marketplace.visualstudio.com/items?itemName=haskell.haskell
Este plugin cuida automaticamente da configuração do seu editor e da instalação de um ambiente incluindo o compilador e o HLS.
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.