Buscar

Haskell: Linguagem Funcional

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 3, do total de 17 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 6, do total de 17 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 9, do total de 17 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Prévia do material em texto

Pontif́ıcia Universidade Católica de Minas Gerais
PUC-MG
Haskell: Puramente funcional
Pedro Igor Martins dos Reis
Belo Horizonte
2022
Pedro Igor Martins dos Reis
Haskell: Puramente funcional
Orientador:
Otaviano Francisco Neves
Belo Horizonte
2022
Sumário
1 Introdução 2
2 História e Cronologia 2
3 Paradigmas e suas caracteŕısticas 5
4 Caracteŕısticas da linguagem 5
4.1 Compiladores . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
5 Haskell em comparação a outras linguagens 7
5.1 Similares . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
5.1.1 Miranda . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
5.1.2 Nix . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
5.2 Contrastantes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
5.2.1 C . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
6 Tutorial de instalação 10
7 Projetos relevantes 11
7.1 Shellcheck . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
7.2 Xmonad . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
7.3 Tidal Cycles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
7.4 Sigma . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
8 Conclusão 13
Lista de Figuras
1 Logo oficial de Haskell . . . . . . . . . . . . . . . . . . . . . . . . . . 2
2 Logo oficial Haskell 98 . . . . . . . . . . . . . . . . . . . . . . . . . . 4
3 Logo anterior Haskell . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
4 Logo oficial Miranda . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
5 Logo oficial NixOS . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
6 Logo comum da linguagem C . . . . . . . . . . . . . . . . . . . . . . 10
7 ShellCheck com o editor Emacs . . . . . . . . . . . . . . . . . . . . . 12
8 Xmonad na prática . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
9 Logo oficial do Tidal Cycles . . . . . . . . . . . . . . . . . . . . . . . 12
10 haskell.org . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
1
Resumo
Haskell é uma linguagem de programação funcional, de tipagem estática,
impĺıcita e preguiçosa, projetada na década de 90 para fins acadêmicos, pes-
quisa e aplicações industriais. Foi influenciada pelas linguagens Miranda e
ML (ou Meta Linguagem).
1 Introdução
Este documento aborda brevemente a respeito da linguagem de programação fun-
cional Haskell, onde é explicado e exemplificado suas principais caracteŕısticas e
funcionalidades. Em suma, os objetivos centrais do desenvolvimento desta lingua-
gem seriam a viabilidade para o ensino e pesquisa, sua gratuidade, universalidade e
evitar a dissemelhança desnecessária de outras linguagens funcionais.
Outrossim, o assunto a seguir não apenas é de interesse do pesquisador,
mas também proporcionará uma vasta gama de conhecimentos a respeito do tema.
Além disto, o estudo presente será utilizado como seminário para a disciplina de
Linguagens de Programação.
Para alcançar o objetivo deste trabalho, foram realizadas pesquisas bibli-
ográficas sobre a linguagem, testes com programas disponibilizados na internet com
o compilador Glasgow Haskell Compiler. Além disto, para praticar os conhecimentos
adquiridos e a fim de obter uma apresentação mais visual, foi configurado o geren-
ciador de janelas Xmonad, este que seu funcionamento é intŕınseco com Haskell.
O desenvolvimento deste trabalho tem o propósito de analisar e comprovar
as caracteŕısticas defendidas da linguagem, como redigibilidade, confiabilidade, reu-
sabilidade, modificabilidade e alta portabilidade. Ademais, diferenciar-se de outras
linguagens conhecidas, por exemplo, C, Java, Python e, por fim, contrastar sua
usabilidade em projetos acadêmicos modernos.
Figura 1: Logo oficial de Haskell
2 História e Cronologia
A primeira versão do Haskell foi oficialmente lançada no dia primeiro de abril de
1990. No entanto, sua origem prática iniciou-se no final da década de 30, onde
foi desenvolvido o Cálculo Lambda, por Alonzo Church e Stephen Kleene. Este
fundamento matemático serviu de base para todas a linguagens posteriores, mas
2
foi considerado a primeira linguagem de programação funcional, tratando-se de um
modelo matemático que descreve relações entre funções, porém não foi criada para
uso em computadores.
Em 1956 foi desenvolvida a linguagem de programação Lisp, segunda lingua-
gem de programação do mundo, inspirada parcialmente pelo teorema do λ-cálculo,
projetada por John McCarthy. Por meio desta última tiveram-se muitos diale-
tos como o Scheme e o Clojure. Lisp não é considerada puramente funcional pois
agrega componentes de linguagens de imperativas como, por exemplo, efeitos cola-
terais, mudanças de estado e comandos de controle.
Pouco tempo depois, em 1960, Peter Landin criou a primeira linguagem
puramente funcional, denominada de ISWIN ou If you see What I mean.
1(defun oper-to-string (oper)
2(let ((str-res "nil"))
3(setf str-res
4(cond
5((eq oper #’+) "+")
6((eq oper #’-) "-")
7((eq oper #’*) "*")))))
Listing 1: Exemplo Lisp
Nos anos 70, por meio da Funcional Programming, foi posśıvel desenvolver
utilizando funções de alto ńıvel (high-order function), que permitem receber outras
funções como argumento ou retornar uma como resultado. Posteriormente, é in-
troduzido o conceito de polimorfismo de funções e a capacitância de inferência de
tipo de dados com ML ou Meta Linguagem. Ulteriormente, Miranda demonstra
pioneirismo com a avaliação preguiçosa.
Na década de 80, houve a ascensão da programação funcional, em que havia
muitas pesquisas em torno de técnicas deste tipo de escrita, onde a mais conhecida
foi a avaliação preguiçosa. Tal teorema pode ser explicado da seguinte forma: a
avaliação é atrasada até um ponto onde o resultado é considerado necessário. Neste
peŕıodo, muitas linguagens surgiram, sendo algumas delas Miranda, LML (Lazy
ML), Orwell, Alfl, Id, Clean, Ponder e Daisy.
Devido à carência de patroćınio e apoio, em 1987 havia o problema que
se tinha muitas linguagens de programação funcionais que não eram maduras ou
acesśıveis o suficiente. Desta forma, em setembro do mesmo ano, ocorreu uma
reunião sobre o assunto, denominada “FPCA’87 Conference”, que surgiu a ideia de
desenvolver uma linguagem robusta e que continha as melhores técnicas funcionais.
Resultado da comissão supracitada, foi batizada a linguagem Haskell, tendo
como base a linguagem Miranda, que era mais “completa” que as demais. O nome
foi uma homenagem ao matemático Haskell Brooks Curry, por contribuir com as
teorias fundamentais da programação funcional. O grupo de desenvolvedores da
linguagem tinham o slogan informal de “Evitar o sucesso a todo custo”. Por conta
disto, Haskell era mais encontrada em ambientes de estudo como Universidades.
A cronologia pode ser dividida em 3 pontos principais, sendo eles, Haskell
1.0, que seria a primeira versão oficial, definida em 1990. Desta versão, 4 outras
definições foram consolidadas, 1.1, 1.2, 1.3 e 1.4. Importante detalhar mais sobre a
versão 1.3, esta que apresentou diversas melhorias e mudanças, sendo elas:
3
1. Tipos de dados algébricos;
2. Classes construtoras;
3. Expansão de funcionalidades I/O.
Em 92, foi criado e lançado o Glasgow Haskell Compiler, compilador de
código aberto mais utilizado por desenvolvedores de Haskell até a atualidade. Pouco
tempo depois, em fevereiro de 1999, surgiu o Haskell 98, um relatório que continha
especificações de uma versão mais estável e portátil, com uma biblioteca focada no
ensino e com a possibilidade de expansão para incrementações e a implementação
do GHC.
Figura 2: Logo oficial Haskell 98
Em 2010, foi publicada a última versão oficial de Haskell, informalmente
chamada de ’Haskell Prime’ (Haskell’), que além de adicionar diversos atributos
muito utilizados,foi importante por trazer atualizações, sendo elas:
1. Módulos hierárquicos;
2. Ligações com outras linguagens como C;
3. Novos padrões de sintaxe e regras de interferência;
4. Especificação de uma diretriz da linguagem e correções na gramática formal.
O último lançamento é considerado o marco mais importante da linguagem,
considerado o padrão atual para a maioria dos desenvolvedores.
Figura 3: Logo anterior Haskell
4
3 Paradigmas e suas caracteŕısticas
Haskell é conhecida por ser uma linguagem puramente funcional, isso significa que se
trata de uma computação avaliativa de funções matemáticas, onde a pureza implica
que uma função que não retorna valores que possam provocar efeitos colaterais.
Tal caracteŕıstica permite uma sintaxe elegante e concisa, sendo posśıvel observar
códigos enxutos e de fácil compreensão.
Como dito anteriormente, a base para o paradigma funcional é o Cálculo
Lambda ou Cálculo-λ, este que é um sistema formal de definições, aplicação e re-
cursão de funções. Completo ao ponto de ser equivalente em poder computacional a
máquina de Turing, este modelo é bastante eficiente para prototipação, especificação
e aprendizado. Por conta disto, é melhor empregado em ambientes acadêmicos do
que em softwares privados.
Outro ponto importante seria o estado compartilhado, referindo-se a valores
que possam ser acessados em mais de um ponto da aplicação. Assim, não é necessário
chamar a variável dentro de um dos argumentos de uma determinada função.
O paradigma funcional possui funções puras, ou seja, funções sem efeito cola-
teral. Assim, ao executar a mesma função com a mesma entrada, a resposta sempre
será a mesma. Ademais, diminui as chances de bugs devido à inexistência de estados
e mutabilidade. No entanto, dificulta o gerenciamento de memória e realiza um uso
consideravelmente elevado de Garbage Collector.
Vale ressaltar que o paradigma também apresenta pontos negativos, por
exemplo, as funções puras podem causar uma menor legibilidade do código, os valo-
res imutáveis com recursões ocasionam uma redução de desempenho e a reutilização
é mais complicada que outros modelos, levando a uma refatoração constante. Lin-
guagens deste grupo apresentam uma curva de aprendizado superior em comparação
a linguagens imperativas como C, principalmente para iniciantes no campo funci-
onal. Portanto, Haskell e semelhantes não seriam práticas ou válidas para todas
situações.
4 Caracteŕısticas da linguagem
Haskell não apenas é ligado ao paradigma funcional, mas também é o melhor exemplo
prático da norma, carregando consigo as vantagens e desvantagens já mencionadas.
Logo, é posśıvel observar uma construção eficiente de programas e um alto ńıvel de
abstração.
1Haskell > "Hello World"
2"Hello World" :: [Char]
Listing 2: Primeiro programa em Haskell
A linguagem permite inferências de tipos, contudo, não é exigido explicitar
seu identificador. Também é posśıvel que um mesmo identificador seja declarado em
partes diferentes do programa, representando diferentes entidades. Haskell conta
com uma checagem forte de tipos de dados, sendo alguns deles: int, integer, float,
double, char e String e também possui tipos compostos como: tuplas e listas.
5
As estruturas de dados mais utilizadas são as tuplas e listas, onde tupla seria
uma sequência finita de elementos de tipos possivelmente diferentes, separada por
v́ırgulas e delimitadas por parênteses. É comumente escrita como (T1, T2, . . . , ), por
exemplo:
1("Pedro Igor",False,10,’V’,1.3) :: (String, Bool, Int, Char, Float)
Listing 3: Exemplo de Tuplas
Haskell é senśıvel à ordem posta de cada elemento nas tuplas, mesmo con-
tendo os mesmos valores, em posições diferentes, não são reconhecidas como equiva-
lentes. Este comportamento é semelhante aos pontos no plano cartesiano ou a um
sistema de coordenadas.
Como citado, o paradigma funcional produz uma abundância de lixo na
memória. Como os dados são imutáveis, é necessário criar valores para guardar o
resultado de cada operação. De maneira contraintuitiva, em Haskell, quanto maior
o percentual do código for lixo, mais rápido ele opera.
A proximidade entre Haskell e a matemática é elevada, podendo ser observada
na semelhança da escrita de funções entre ambos universos:
1f x -- f(x)
2f x y -- f(x,y)
3f (g x) -- f(g(x))
4f x (g y) -- f(x,g(y))
5f x * g y -- f(x) * g(y)
Listing 4: Hasell e Matemática
Além disso, é importante ressaltar sobre a atenção às regras de layout de
Haskell, semelhante ao Python, é necessário um cuidado adicional com tabulações
ou espaços, pois as separações entre expressões são realizadas pela indentação. Tal
comportamento pode ser visto no exemplo abaixo:
1a = b + c
2where
3{
4b = 15
5c = 20
6}
7d = c - b
4.1 Compiladores
A linguagem pode ser interpretada ou compilada, sendo os três principais compi-
ladores: Glasgow Haskell Compiler, Haskell User’s Gofer System e o Helium. O
primeiro é um interpretador e compilador, escrito em Haskell, capaz de produzir
programas mais rápidos, porém é menos portável, mais lento e exige mais memória
que os demais. Por outro lado, o Hugs é apenas um interpretador portável e leve,
escrito em C e recomendado para iniciantes. Caso o programador deseje algo mais
simples, pode utilizar compiladores online como tryHaskell.org e Replit.
6
5 Haskell em comparação a outras linguagens
Atualmente, no mercado existem cerca de 1300 linguagens de programação. Neste
tópico será mostrado semelhanças e diferenças da linguagem Haskell com algumas
conhecidas no mercado.
5.1 Similares
5.1.1 Miranda
Miranda é a linguagem antecessora a Haskell, baseada nas linguagens ML e Hope
e é considerada a primeira linguagem funcional a ser comercialmente suportada. A
semelhança entre Haskell e Miranda é elevada, porém a primeira demonstra maior
facilidade de aplicação.
1-- Miranda
2fib :: (num, num, num) -> [char]
3fib(num,a,b) = show(a+b) ++ " " ++ fib((num - 1),(a+b),a), if(a > 0 & num >
1)
4= show(a) ++ " " ++ show(b) ++ " " ++ show(a+b) ++ " " ++
fib((num - 1),(a+b),b), if(a == 0)
5= [], otherwise
6
7showFib :: num -> [char]
8showFib num = "\n" ++ fib(num, 0, 1) ++ "\n"
9
10-- Haskell
11fib 0 = 0
12fib 1 = 1
13fib n
14| even n = f1 * (f1 + 2 * f2)
15| n ‘mod‘ 4 == 1 = (2 * f1 + f2) * (2 * f1 - f2) + 2
16| otherwise = (2 * f1 + f2) * (2 * f1 - f2) - 2
17where k = n ‘div‘ 2
18f1 = fib k
19f2 = fib (k-1)
Listing 5: Sequência de Fibonacci
Figura 4: Logo oficial Miranda
5.1.2 Nix
Nix é um gerenciador de pacotes multiplataforma que é uma implantação puramente
funcional, desenvolvido em 2003 e não possui a mesma finalidade ou origem, mas
apresenta uma sintaxe muito semelhante com Haskell. Em ambos, a análise das
expressões é fundamental para o funcionamento e as configurações do tipo Nix são
tão modulares quanto, por exemplo:
7
1{ config, pkgs, ... }:
2{
3imports =
4[
5./myPantheon.nix
6./hardware-configuration.nix
7];
8
9boot =
10{
11loader =
12{
13systemd-boot.enable = true;
14efi.canTouchEfiVariables = true;
15};
16consoleLogLevel = 0;
17initrd.verbose = false;
18plymouth.enable = true;
19initrd.kernelModules = [ "amdgpu" ];
20};
21
22services =
23{
24pipewire =
25{
26enable = true;
27pulse.enable = true;
28};
29fwupd.enable = true;
30printing.enable = true;
31resolved.enable = true;
32geoclue2.enable = true;
33power-profiles-daemon.enable = true;
34};
35
36# [...]
37}
Listing 6: Arquivo de configuração para NixOS
Figura 5: Logo oficial NixOS
5.2 Contrastantes
5.2.1 C
A linguagem C foi desenvolvida em 1972 por Ken Thompson e Dennis Ritchie, sendo
imperativa e extremamente relevante para o mercado. Por ela, diversas outras foram
8
criadas, como Python, Java, C++, C Sharp, etc. Haskell é muito comparada com C
devido a importância que cada uma possui em seu devido paradigma.As principais
vantagens da primeira seriam a curva de aprendizagem menor, compatibilidade e
praticidade, já que C exige muito pouca memória e na maioria das situações é capaz
de extrair mais desempenho da máquina.
Como dito anteriormente, uma das vantagens de Haskell sobre outras lingua-
gens seriam os códigos enxutos. Um exemplo clássico seria o algoritmo de QuickSort,
podendo ser escrito de inúmeras formas diferentes. O exemplar abaixo é fornecido
pelo próprio do Wikipedia da linguagem:
1template <typename T>
2void qsort (T *result, T *list, int n)
3{
4if (n == 0) return;
5T *smallerList, *largerList;
6smallerList = new T[n];
7largerList = new T[n];
8T pivot = list[0];
9int numSmaller=0, numLarger=0;
10for (int i = 1; i < n; i++)
11{
12if (list[i] < pivot)
13smallerList[numSmaller++] = list[i];
14else
15largerList[numLarger++] = list[i];
16}
17qsort(smallerList,smallerList,numSmaller);
18qsort(largerList,largerList,numLarger);
19
20int pos = 0;
21for ( int i = 0; i < numSmaller; i++)
22{
23result[pos++] = smallerList[i];
24}
25
26result[pos++] = pivot;
27
28for ( int i = 0; i < numLarger; i++)
29{
30result[pos++] = largerList[i];
31}
32
33delete [] smallerList;
34delete [] largerList;
35};
Listing 7: QuickSort em C
Enquanto em Haskell, reduz para cinco linhas:
1qsort :: (Ord a) => [a] -> [a]
2qsort [] = []
3qsort (x:xs) = qsort less ++ [x] ++ qsort more
4where less = filter (<x) xs
9
5more = filter (>=x) xs
Listing 8: QuickSort em Haskell
No quesito de benchmark, não é posśıvel concluir que uma é superior a outra,
pois depende da aplicação.Haskell é melhor utilizada em programas de aprendizado
de máquina, análise de dados e é escolhida pela facilidade na prototipação e de-
puração dos algoritmos, enquanto em C, melhor aplicado para desenvolvimento de
drivers, kernel (como GNU/Linux) e sistemas operacionais.
Figura 6: Logo comum da linguagem C
6 Tutorial de instalação
Uma instalação do Haskell completa consiste em 3 componentes, sendo eles: o com-
pilador GHC, o gerenciador de pacotes Cabal e o construtor Stack, dispońıveis para
sistemas baseados em GNU/Linux e BSDs, Windows e MacOS. A documentação
destes se encontra no próprio site da linguagem.
A forma recomendada da instalação do compilador seria através do GHCup,
que se trata de um instalador geral da linguagem, bastante intuitivo e simples,
independendo de usuário administrador e serve em todos os sistemas citados anteri-
ormente (Windows seria com WSL2). Para obtê-lo, execute o comando a seguir em
um terminal de sua preferência:
1curl --proto ’=https’ --tlsv1.2 -sSf https://get-ghcup.haskell.org | sh
A instalação também é posśıvel por meio dos gerenciadores de pacotes nati-
vos de cada distribuição. A desvantagem deste processo seria a dependência alta de
pacotes e o posśıvel atraso de versão em comparação com o desenvolvedor princi-
pal. Entretanto, se necessário, a instalação pode ser feita em apenas um comando,
sendo relativamente mais complicado para o Windows, que requer a configuração
e instalação do Chocolatey. Diferentemente de outras linguagens, como Python ou
Java, Haskell requer uma familiaridade básica com terminais.
• FreeBSD
1pkg install ghc stack hs-cabal-install
2
10
• OpenSUSE
1sudo zypper install ghc stack
2
• Derivados RPM (RHEL, Fedora. . . )
1sudo dnf in -y ghc stack
2
• Derivados APT (Debian, Ubuntu. . . )
1sudo apt install -y ghc stack
2
• Gentoo
1sudo emerge -avq dev-lang/ghc dev-haskell/cabal-install
2
• Windows Como dito anteriormente, a instalação no Windows requer mais pas-
sos que os demais, para a instalação do Chocolatey, execute o seguinte comando
no Powershell:
1Set-ExecutionPolicy Bypass -Scope Process -Force;
[System.Net.ServicePointManager]::SecurityProtocol =
[System.Net.ServicePointManager]::SecurityProtocol -bor 3072; iex
2((New-Object System.Net.WebClient).DownloadString
3(’https://community.chocolatey.org/install.ps1’))
4
Concluindo a instalação do Chocolatey, pode-se dar sequência na instalação
dos pacotes necessários:
1choco install ghc haskell-stack
2
Por fim, também é posśıvel utilizar o HUGS, sendo mais simplista e leve que
GHC. Em ambientes GNU/Linux, apenas um pacote é necessário. Por exemplo, em
sistemas que utilizam DNF como gerenciador de pacotes:
1sudo dnf in -y hugs98
7 Projetos relevantes
7.1 Shellcheck
Shellcheck trata-se de uma ferramenta de código aberto que analisa shell scripts,
capaz de apontar e esclarecer ao usuário problemas comuns de sintaxe e de semântica,
muito comuns com iniciantes desta área. É compat́ıvel com os principais editores de
código do mercado, como: Vim, Emacs, Visual Studio Code, Atom, Sublime, etc.
11
Figura 7: ShellCheck com o editor Emacs
7.2 Xmonad
Xmonad é um gerenciador de janelas dinâmico, desenvolvido para sistemas Unix,
focado em automatizar o processo de organização de janelas. Assim como seus
semelhantes (i3, Dwm, SpecterWM), tem requisitos básicos de sistema e é uma
alternativa para ambientes gráficos convenvionais como KDE, GNOME.
Figura 8: Xmonad na prática
7.3 Tidal Cycles
Tidal Cycles é um software de código de aberto, projetado para criar músicas por
meio de padrões no código, sendo posśıvel gerar sequências ŕıtmicas complexas e ao
vivo em poucas linhas de texto. Possui uma vasta biblioteca de funções e, a partir
destas, pode-se gerar novas com infinitas combinações.
Figura 9: Logo oficial do Tidal Cycles
12
7.4 Sigma
Sigma é um mecanismo de regras desenvolvido pelo Facebook (Meta), onde são
realizadas chamadas de poĺıticas. Cada interação com a rede social, desde uma
curtida até uma atualização de status são avaliadas afim de detectar e bloquear
interações maliciosas. De acordo com o blog oficial, Haskell foi escolhida devido a
cinco fatores principais:
1. Fortemente tipada;
2. Correções a atualizações rapidamente em ambiente de produção;
3. Performance;
4. Suporte para desenvolvimento interativo;
5. Busca automática de massa de dados.
8 Conclusão
O trabalho teve intenção de apresentar brevemente a linguagem Haskell. Por meio de
várias pesquisas, pode-se concluir a relevância que a linguagem possui no ambiente
acadêmico e como é defendida por muitos como o pilar da pureza funcional.
Possui muitas vantagens e pontos fortes. Portanto, em comparação a linha-
gem C, Java ou Python, a curva de aprendizado é superior, onde os programadores
estão acostumados com a ordem:
1int soma (int x, int y);
Verão que em Haskell é escrito de uma forma bem diferente:
1add :: Integer -> Integer -> Integer
2add x y = x + y
Desta forma, considerando que a maioria dos jovens desenvolvedores iniciam
a carreira com uma das linguagens supracitadas, o contato inicial com o paradigma
funcional é desafiador, porém, tendo um esforço em aprender Haskell, terá grandes
retornos, já que por ela, consegue realizar mais trabalho com menos código.
Importante salientar o capricho da equipe desenvolvedora em oferecer um
site bem constrúıdo, não apenas intuitivo, mas também no estilo consistente. Este
cuidado torna mais acesśıvel e atraente tentar utilizar a linguagem, aspecto não visto
nas demais.
Além disto, os grandes projetos de Haskell enaltecem a linguagem em vários
pontos, no site ou pelo nome. É de se imaginar que devido à menor popularidade
em comparação a outras, anseiam por uma expansão da mesma.
Infelizmente, a linguagem é pouco utilizada pela comunidade de desenvolve-
dores, especialmente no Brasil, onde conteúdo sobre Haskell é mais visto em docu-
mentos do meio universitário. Ademais, os projetos mais relevantes são ainda pouco
populares no Github e outras plataformas de hospedagem de código, comprovando
13
Figura 10: haskell.org
que desde seu ińıcio, Haskell não é muito requisitado no mercado e, consequente-
mente, há poucas vagas e oportunidades que aplicam ou requisitam a linguagem.
Porfim, tem-se uma linguagem muito poderosa, robusta e bem documen-
tada que não tem o objetivo de crescer, mas sim, de manter confiável e persistir
alinhada com o paradigma funcional. Portanto, devido ao aumento da demanda
sobre computação automatizada e aprendizagem de máquina e a valorização dos
dados digitais, leva a crer que Haskell terá um futuro promissor, considerando que
análise de informações em abundância é um dos pontos fortes da linguagem.
Referências
[1] Bragilevsky, V. Haskell in Depth. Manning Publications, 2021.
[2] Castillo, J. J., Guzmán, A., Ligorria, L. d. C., and Marciszack,
M. M. Unidad n° 4: paradigma funcional.
[3] Corvo, H. S. Programación funcional: caracteŕısticas, ejemplos, ventajas, des-
ventajas. https://www.lifeder.com/programacion-funcional/, 2020. [On-
line; accessed 7-September-2022].
[4] Costa, S. Prinćıpios e padrões de programação funcional — Parte
1. https://sergiocosta.medium.com/princ%C3%ADpios-e-padr%C3%
B5es-de-programa%C3%A7%C3%A3o-funcional-parte-1-fa3bff0d6d2d,
2019. [Online; accessed 13-September-2022].
[5] Du Bois, A. R. Programação funcional com a linguagem haskell. Disponıvel
em: http://www. inf. ufpr. br/andrey/ci062/ProgramacaoHaskell. pdf (2008).
[6] Souza, V. E. S. Linguagens de programação 2016/2.
[7] Thompson, S. Haskell: The Craft of Functional Programming. Addison-Wesley
Professional, 2011.
14
https://www.lifeder.com/programacion-funcional/
https://sergiocosta.medium.com/princ%C3%ADpios-e-padr%C3%B5es-de-programa%C3%A7%C3%A3o-funcional-parte-1-fa3bff0d6d2d
https://sergiocosta.medium.com/princ%C3%ADpios-e-padr%C3%B5es-de-programa%C3%A7%C3%A3o-funcional-parte-1-fa3bff0d6d2d
[8] VedoVatto, T., and Costa, E. T. Haskell: uma linguagem de programação
ideal para matemáticos.
15
	Introdução
	História e Cronologia
	Paradigmas e suas características
	Características da linguagem
	Compiladores
	Haskell em comparação a outras linguagens
	Similares
	Miranda
	Nix
	Contrastantes
	C
	Tutorial de instalação
	Projetos relevantes
	Shellcheck
	Xmonad
	Tidal Cycles
	Sigma
	Conclusão

Outros materiais