Haskell: diferenças entre revisões

Origem: Wikilivros, livros abertos por um mundo aberto.
[revisão pendente][revisão pendente]
Conteúdo apagado Conteúdo adicionado
Sem resumo de edição
Linha 2: Linha 2:
[[Arquivo:Haskell-Logo-Variation.png|right]]
[[Arquivo:Haskell-Logo-Variation.png|right]]


'''Haskell''' é uma [[w:programação funcional|linguagem de programação funcional]]. Se você possui alguma experiência com programação, talvez queira ter uma [[/Visão geral|visão geral]] para entender um pouco como Haskell funciona e suas diferenças em relação a outras linguagens.
'''Haskell''' é uma [[w:Programação funcional|linguagem de programação funcional]]. Se você possui alguma experiência com programação, talvez queira ter uma [[/Visão geral|visão geral]] para entender um pouco como Haskell funciona e suas diferenças em relação a outras linguagens.


Haskell distingue-se de algumas maneiras:
Haskell distingue-se de algumas maneiras:
Linha 29: Linha 29:


=== Básico ===
=== Básico ===
<ul class=etapa>
* [[/Primeiro passo/]] [[Imagem:25%.svg]]
{{Etapa|[[/Primeiro passo/]]|p=50}}
* [[/Variáveis e funções/]] [[Imagem:25%.svg]]
{{Etapa|[[/Variáveis e funções/]]|p=50}}
* [[/Verdadeiro ou falso/]] [[Imagem:25%.svg]]
{{Etapa|[[/Verdadeiro ou falso/]]|p=50}}
* [[/Tipos básicos/]] [[Imagem:25%.svg]]
{{Etapa|[[/Tipos básicos/]]|p=50}}
* [[Listas e n-uplas]] [[Imagem:00%.svg]]
{{Etapa|[[/Listas e n-uplas/]]|p=50}}
* [[Tipos básicos II]] [[Imagem:00%.svg]]
{{Etapa|[[/Tipos básicos II/]]|p=00}}
* [[Póximos passos]] [[Imagem:00%.svg]]
{{Etapa|[[/Póximos passos/]]|p=00}}
* [[Incrementando seu vocabulário]] [[Imagem:00%.svg]]
{{Etapa|[[/Incrementando seu vocabulário/]]|p=00}}
* [[Entradas e saídas simples]] [[Imagem:00%.svg]]
{{Etapa|[[/Entradas e saídas simples/]]|p=00}}
</ul>
|valign="top" style="border-right: 1px dashed MediumAquamarine"|
|valign="top" style="border-right: 1px dashed MediumAquamarine"|


=== Elementar ===
=== Elementar ===
<ul class=etapa>
* [[Recursão]] [[Imagem:00%.svg]]
{{Etapa|[[/Recursão/]]|p=00}}
* [[Listas II]] [[Imagem:00%.svg]]
* [[Listas III]] [[Imagem:00%.svg]]
{{Etapa|[[/Listas II/]]|p=00}}
{{Etapa|[[/Listas III/]]|p=00}}
* [[Declaração de tipos]] [[Imagem:00%.svg]]
{{Etapa|[[/Declaração de tipos/]]|p=00}}
* [[Casamento de padrões]] [[Imagem:00%.svg]]
{{Etapa|[[/Casamento de padrões/]]|p=00}}
* [[Estruturas de controle]] [[Imagem:00%.svg]]
{{Etapa|[[/Estruturas de controle/]]|p=00}}
* [[Mais funções]] [[Imagem:00%.svg]]
{{Etapa|[[/Mais funções/]]|p=00}}
* [[Funções de alta ordem]] [[Imagem:00%.svg]]
{{Etapa|[[/Funções de alta ordem/]]|p=00}}
* [[Usando GHCi]] [[Imagem:00%.svg]]
{{Etapa|[[/Usando GHCi/]]|p=00}}
</ul>
|valign="top" style="border-right: 1px dashed MediumAquamarine"|
|valign="top" style="border-right: 1px dashed MediumAquamarine"|


=== Intermediário ===
=== Intermediário ===
<ul class=etapa>
* [[Módulos]] [[Imagem:00%.svg]]
{{Etapa|[[/Módulos/]]|p=00}}
* [[Programas completos]] [[Imagem:00%.svg]]
{{Etapa|[[/Programas completos/]]|p=00}}
* [[Indentação]] [[Imagem:00%.svg]]
{{Etapa|[[/Indentação/]]|p=00}}
* [[Mais tipos]] [[Imagem:00%.svg]]
{{Etapa|[[/Mais tipos/]]|p=00}}
* [[Outras estruturas de controle]] [[Imagem:00%.svg]]
{{Etapa|[[/Outras estruturas de controle/]]|p=00}}
* [[Classes e tipos]] [[Imagem:00%.svg]]
{{Etapa|[[/Classes e tipos/]]|p=00}}
* [[A classe Functor]] [[Imagem:00%.svg]]
{{Etapa|[[/A classe Functor/]]|p=00}}
</ul>
|valign="top"|
|valign="top"|


=== Mônadas ===
=== Mônadas ===
<ul class=etapa>
* [[Prólogo: IO, um functor aplicativo]] [[Imagem:00%.svg]]
{{Etapa|[[/Prólogo: IO, um functor aplicativo/]]|p=00}}
* [[Entendento mônadas]] [[Imagem:00%.svg]]
{{Etapa|[[/Entendento mônadas/]]|p=00}}
** [[Maybe - Listas]] [[Imagem:00%.svg]]
:{{Etapa|[[/Maybe - Listas/]]|p=00}}
** [[Notação do]] [[Imagem:00%.svg]]
:{{Etapa|[[/Notação do/]]|p=00}}
** [[IO - State]] [[Imagem:00%.svg]]
:{{Etapa|[[/IO - State/]]|p=00}}
* [[Alternative e MonadPlus]] [[Imagem:00%.svg]]
{{Etapa|[[/Alternative e MonadPlus/]]|p=00}}
* [[Transformadores de mônadas]] [[Imagem:00%.svg]]
{{Etapa|[[/Transformadores de mônadas/]]|p=00}}
</ul>
|}
|}


== Apêndices ==
== Apêndices ==
* [[/Açúcar sintático/]] [[Imagem:00%.svg]]
* [[/Açúcar sintático/]]
* [[/Soluções/|Respostas dos exercícios]] [[Imagem:00%.svg]]
* [[/Soluções/|Respostas dos exercícios]]
* [https://pt.wikibooks.org/wiki/Categoria:Livro/Haskell/Arquivo Páginas antigas]
* [https://pt.wikibooks.org/wiki/Categoria:Livro/Haskell/Arquivo Páginas antigas]



Revisão das 02h44min de 18 de dezembro de 2017

Haskell é uma linguagem de programação funcional. Se você possui alguma experiência com programação, talvez queira ter uma visão geral para entender um pouco como Haskell funciona e suas diferenças em relação a outras linguagens.

Haskell distingue-se de algumas maneiras:

  • Haskell é uma linguagem de programação funcional pura. Quando se chama a mesma função duas vezes, em momentos diferentes, mas com os mesmo argumentos, ela retornará exatamente o mesmo valor em ambas as vezes.
  • Haskell possui um sistema de tipos bastante sofisticado, incluindo classes e tipos algébricos generalizados.
  • Haskell é uma linguagem preguiçosa, isto é, que executa operações apenas quando elas são necessárias para obter um resultado final.

Uma das vantagens de Haskell é que o código resultante fica muito mais claro quando se usam apenas funções puras, o que torna bem mais fácil o processo de verificar se uma função está correta ou não. Além do mais, o sistema de tipos ajuda a detectar muitos erros, tanto sutis e profundos, quando explícitos e superficiais.

Visão geral

Wikipedia
Wikipedia
A Wikipédia tem mais sobre este assunto:
Haskell (linguagem de programação)

Este livro, trata-se de uma tradução adaptada do wikilivro de Haskell em inglês. Entretanto, aqui apresentaremos apenas sua parte introdutória. Esperamos que programadores mais experientes estejam dispostos a contribuir com o processo de expansão desta iniciativa para que ela também inclua a parte avançada contida no original.

No caso de você já possuir alguma experiência de programação, é provável que as linguagens com os quais você se habitou sejam bastante diferentes de Haskell, então tenha paciência: hábitos e conceitos destas outras linguagens podem entrar em conflito com os próprio conceitos de Haskell, dificultando o processo de aprendizado. O melhor a se fazer é começar do básico e não pular etapas. Com certeza você aproveitará bastante esse momento de aprendizado.

Conteúdo

Com os conceitos básicos da linguagem, mais prática com algumas das bibliotecas mais usadas, você conseguirá construir programas simples.

A maioria dos capítulos contem exercícios para testar seu progresso. As resoluções podem ser encontradas no apêndice do livro para que você verifique suas respostas.

Básico

Elementar

Intermediário

Mônadas

Apêndices