HaskellBR blog


Haskell Meetup - Edição Janeiro - São Paulo

H.T.

Em 25 de janeiro realizamos mais uma edição do meetup de Haskell, em São Paulo.

Realizado no escritório da Amazon, na zona Sul da cidade, o meetup contou com três excelentes apresentações, ministradas por Daniel Yokomizo, Pedro Yamada e Eric Andrade.

Continue lendo

Meta-programação em Haskell - Parte 1 - C, LISP, Template Haskell e QuasiQuotes

Pedro Tacla Yamada

Algumas linguagens mudam do dia para noite, quebrando uma quantidade enorme de código que estava em produção. Outras demoram anos para avançar. Há uma formas melhores da comunidade introduzir mudanças organicamente; um sistema de macros sendo uma forma popular. Gostaria de discutir o quê o Haskell traz para essa frente, propostas que para mim são novas e inusitadas.

Em um segundo post, tentarei mostrar um exemplo de meta-programação que soluciona um problema sério na linguagem e como sua criação impulsionou mudanças no compilador.

Continue lendo

Sobre folds e uma pegadinha

Hercules Lemke Merscher

Em Haskell uma maneira bem comum de iterar sobre uma lista e acumular valores é por meio de recursão. Geralmente usamos pattern matching para tratar o caso da lista vazia, seguido do caso da lista com um ou mais valores, aplicando a função e chamando a função novamente com o restante da lista.

somaInteiros :: [Int] -> Int
somaInteiros []     = 0
somaInteiros (x:xs) = x + (somaInteiros xs)

somaInteiros [1,2,3,4,5] -- 15

Na medida que vamos nos habituando com recursão esse tipo de função se torna comum em código Haskell. Por se tratar de um padrão muito comum, algumas funções foram incluídas junto da linguagem para abstrair o uso de recursão, e essas funções são chamadas folds.

Continue lendo

24 dias de Hackage, 2015 - dia 24 - Conclusão e agradecimentos

Franklin Chen

Esse é um artigo escrito por Franklin Chen e traduzido para o português. Ler original.

Índice de toda a série

O índice de toda a série está no topo do artigo para o dia 1.

Encontro HaskellBR São Paulo

Vamos nos encontrar em São Paulo em Janeiro de 2016. Marque sua presença e comente se não puder vir.

Vote se o encontro terá workshops, um dojo ou palestras.

Dia 24

(Discussão no Reddit)

Whew, esse projeto “24 dias de Hackage, 2015” finalmente acabou!

Eu nunca esperei fazer algo assim e preciso agradecer todos que me encorajaram enquanto estava envolvido nisso. Gostei da qualidade dos comentários e correções que recebi assim como os links para bibliotecas relacionadas para Haskell.

Continue lendo

24 dias de Hackage, 2015 - dia 23 - Liquid Haskell: Refinamento de tipos no mundo real

Franklin Chen

Esse é um artigo escrito por Franklin Chen e traduzido para o português. Ler original.

Índice de toda a série

O índice de toda a série está no topo do artigo para o dia 1.

Encontro HaskellBR São Paulo

Vamos nos encontrar em São Paulo em Janeiro de 2016. Marque sua presença e comente se não puder vir.

Vote se o encontro terá workshops, um dojo ou palestras.

Dia 23

(Discussão do original no Reddit)

Ao longo dessa série de posts “24 dias de Hackage, 2015”, eu me esforcei para dar um gostinho de usar o QuickCheck para especificar contratos que deveriam ser satisfeitos pelo nosso código que não são checados a tempo de compilação mas por testes aleatórios durante runtime. Mas nós sabemos que só porque um pedaço de código tem centenas ou milhares de testes, isso não é uma prova de que o código está correto de fato para todos os casos possíveis. Eu também usei o newtype como uma forma de indicar a intenção de que eu queria restringir os valores legais para um tipo, como no dia 15 quando eu laboriosamente tentei refinar tipos existentes sem nenhuma prova automaticamente checável de que estava os populando corretamente.

Continue lendo

24 dias de Hackage, 2015 - dia 22 - Shake: O build system dinâmico

Franklin Chen

Esse é um artigo escrito por Franklin Chen e traduzido para o português. Ler original.

Índice de toda a série

O índice de toda a série está no topo do artigo para o dia 1.

Encontro HaskellBR São Paulo

Vamos nos encontrar em São Paulo em Janeiro de 2016. Marque sua presença e comente se não puder vir.

Vote se o encontro terá workshops, um dojo ou palestras.

Dia 22

(Discussão do original no Reddit)

make, o venerável build system, é falho em muitos sentidos. Para mim, os dois maiores problemas eram:

  • Lidar com builds dinâmicas, onde algo durante o build atira o build de dependencias
  • Querer escrever código em uma linguagem de verdade, não make, “a linguagem turing complete

Muitos build systems melhorados surgiram desde o make. Por exemplo, alguns anos atrás, descobri o SCons, o build system dinâmico baseado em Python e ele melhorou muito minha vida, porque podia o tratar como uma biblioteca embedável e fazer as tarefas chamarem meu código Python. Eu ainda tenho programas usando SCons em uso.

Continue lendo

24 dias de Hackage, 2015 - dia 21 - hood, GHood, Hoed: Debugging orientado à observação no Haskell

Franklin Chen

Esse é um artigo escrito por Franklin Chen e traduzido para o português. Ler original.

Índice de toda a série

O índice de toda a série está no topo do artigo para o dia 1.

Encontro HaskellBR São Paulo

Vamos nos encontrar em São Paulo em Janeiro de 2016. Marque sua presença e comente se não puder vir.

Vote se o encontro terá workshops, um dojo ou palestras.

Dia 21

(Discussão no Reddit)

Como você debugga seu código Haskell?

Eu tenho que confessar de cara que não tenho uma boa resposta para a questão de como debuggar Haskell.

Não sou a pessoa certa para falar sobre debuggers, porque a última vez que usei uma ferramenta de debugging oficial foi quando estava desenvolvendo C e C++ e usava ferramentas como o gdb e interfaces de mais alto-nível para ele, e desde então, meu processo de debugging para muitas linguagens tem envolvido olhar a stack traces e logs, inserir expressões “print”, escrever testes melhores e refatorar o código para encontrar a causa do problema. Eu não uso mais aplicações de debugging oficiais tanto assim (com breakpoints, stepping, etc.). Mas será que eu deveria?

Continue lendo

24 dias de Hackage, 2015 - dia 20 - dimensional: Computação segura sobre quantidades físicas com unidades

Franklin Chen

Esse é um artigo escrito por Franklin Chen e traduzido para o português. Ler original.

Índice de toda a série

O índice de toda a série está no topo do artigo para o dia 1.

Dia 20

(Discussão no Reddit)

Uma das coisas que os professores de ciência no ensino-médio sempre enfatizavam, quando estávamos calculando algo, era ser explícitos sobre as unidades de medida. Eles eram rigorosos em querer que nós mostrássemos as unidades, as carregassemos e cancelássemos quando apropriado, para extrair uma resposta final que fizesse sentido. E por bons motivos! Se você adicionar uma distância (como um número de metros) e uma velocidade (como kilometros por segundo), isso é um erro de tipo. Também é um erro de tipo se você adicionar o valor numérico de uma distância em metros ao valor de uma distância em pés: para fazer essa adição, você teria que as converter para uma unidade comum e, então, adicionar os números.

A linguagem de programação F# vem com unidades de medida inclusas no seu sistema de tipos. Isso é uma funcionalidade muito legal. Como podemos fazer isso em Haskell?

Continue lendo

24 dias de Hackage, 2015 - dia 19 - ghc-core-html, list-fusion-probe: As regras de reescrita do GHC que excluem estruturas de dados intermediárias

Franklin Chen

Esse é um artigo escrito por Franklin Chen e traduzido para o português. Ler original.

Índice de toda a série

O índice de toda a série está no topo do artigo para o dia 1.

Encontro HaskellBR São Paulo

Vamos nos encontrar em São Paulo em Janeiro de 2016. Marque sua presença e comente se não puder vir.

Vote se o encontro terá workshops, um dojo ou palestras.

Dia 19

(Discussão no reddit)

A funcionalidade mais legal de usar Haskell, para mim, é o fusion. O compilador GHC realiza essa otimização memorável, que pode apagar estruturas intermediárias inteiras inteiras da existência.

O que isso quer dizer, e como podemos saber que aconteceu? Hoje vou mostrar como o ghc-core-html e o list-fusion-probe podem ajudar a determinar o que o compilador de fato fez com nossas estruturas de dados intermediárias.

Continue lendo

24 dias de Hackage, 2015 - dia 18 - vector, vector-algorithms: Libere seu alter-programador C

Franklin Chen

Esse é um artigo escrito por Franklin Chen e traduzido para o português. Ler original.

Encontro HaskellBR São Paulo

Vamos nos encontrar em São Paulo em 25 de Janeiro de 2016. Marque sua presença e comente se não puder vir.

Índice de toda a série

O índice de toda a série está no topo do artigo para o dia 1.

Dia 18

(Discussão no Reddit)

É comum em programação, que a estrutura de dados a ser usada é um array estilo C, seja ele tratado como mutável ou imutável.

Idealmente, eu não teria que escrever esse artigo, mas eu tenho a impressão de que muitos recem chegados ao Haskell não sabem sobre o vector, a biblioteca para arrays estilo C, e usam listas onde arrays se encaixariam melhor no problema. Arrays são eficientes para indexar e também são eficientes quanto ao cache da CPU e a memória, sendo alocados em um bloco de memória, ao invés de espalhados por meio de um monte de ponteiros.

Continue lendo

24 dias de Hackage, 2015 - dia 17 - ansi-wl-pprint: Evitando hackear com strings

Franklin Chen

Esse é um artigo escrito por Franklin Chen e traduzido para o português. Ler original.

Encontro HaskellBR São Paulo

Vamos nos encontrar em São Paulo em 25 de Janeiro de 2016. Marque sua presença e comente se não puder vir.

Índice de toda a série

O índice de toda a série está no topo do artigo para o dia 1.

Dia 17

Hoje, fazemos o inverso do que fizemos no day 14, que foi parsear de texto para uma árvore de sintaxe abstrata. Hoje nós fazemos o pretty-printing de uma árvore abstrata para texto.

Continue lendo

24 dias de Hackage, 2015 - dia 16 - safe; o que é segurança mesmo?

Franklin Chen

Esse é um artigo escrito por Franklin Chen e traduzido para o português. Ler original.

Encontro HaskellBR São Paulo

Vamos nos encontrar em São Paulo em 25 de Janeiro de 2016. Marque sua presença e comente se não puder vir.

Índice de toda a série

O índice de toda a série está no topo do artigo para o dia 1.

Dia 16

(Discussão no Reddit do original)

Hoje farei algo estranho: até agora, discuti bibliotecas e ferramentas que eu de fato uso. Hoje, vou discutir uma biblioteca que não uso e pensar um pouco sobre porque não a uso e porque poderia querer a usar. Essa biblioteca é o safe, que tenta nos proteger da infeliz “insegurança” de funções comuns do Prelude padrão.

Isso é uma coisa boa, certo? Afinal, no dia 7, eu promovi o uso da lista NonEmpty e de novo a usei no dia 14. Eu gosto de segurança, mas o que é “segurança” mesmo?

Continue lendo

24 dias de Hackage, 2015 - dia 15 - IOSpec: Testando IO e algumas dicas para o QuickCheck

Franklin Chen

Esse é um artigo escrito por Franklin Chen e traduzido para o português. Ler original.

Índice de toda a série

O índice de toda a série está no topo do artigo para o dia 1.

Encontro HaskellBR São Paulo

Vamos nos encontrar em São Paulo em 25 de Janeiro de 2016. Marque sua presença e comente se não puder vir.

Dia 15

No dia 11 mencionei tangencialmente me sentir envergonhado de que ao contrário dos meus outros exemplos, porque estava usando IO, eu não comecei escrevendo testes de cara. Eu não queria desviar do tópico em questão, que não tinha nada a ver com IO mas com combinadores monádicos genéricos.

Continue lendo

24 dias de Hackage, 2015 - dia 14 - Earley: Uma biblioteca de parsers promisora para Haskell

Franklin Chen

Esse é um artigo escrito por Franklin Chen e traduzido para o português. Ler original.

Índice de toda a série

O índice de toda a série está no topo do artigo para o dia 1.

Encontro HaskellBR São Paulo

Vamos nos encontrar em São Paulo em 25 de Janeiro de 2016. Marque sua presença e comente se não puder vir.

Dia 14

No dia 10, mostrei como usar s-expressions para evitar ter de escrever um parser customizado. Mas escrever parsers não é nada mal em Haskell; ou será que é? A popular biblioteca parsec tem muitos problemas, porque ela requere backtracking hackeado à mão que causa mensagens de erro estranhas e dificuldade de pensar sobre a sua gramática. Há um fork melhorado do parsec chamado megaparsec, mas ainda é o mesmo tipo de tecnologia. Que tal algo completamente diferente?

Continue lendo

24 dias de Hackage 2015 - dia 13 - hint: Avaliação em runtime para Haskell

Franklin Chen

Esse é um artigo escrito por Franklin Chen e traduzido para o português. Ler original.

Índice de toda a série

O índice de toda a série está no topo do artigo para o dia 1.

Dia 13

Um característica marcante de uma uma “linguagem dinâmica” como Lisp e JavaScript é a habilidade de avaliar código em runtime, dentro de um processo existente. Já que o runtime de carregar classes é uma funcionalidade fundamental do Java, Java também seria uma “linguagem dinâmica”? Acho que os termos “linguagem estática” e “linguagem dinâmica” não são muito úteis, e uma comparação de linguagens, compiladores e ambientes de desenvolvimento deveria se concentrar em funções especificas da experiência de usuário e onde as barreiras estão na semântica. Uma coisa complicada é que muito do que é interessante na verdade depende da implementação.

Continue lendo

24 dias de Hackage 2015 - dia 12 - json-autotype: Inferindo tipos a partir de dados

Franklin Chen

Esse é um artigo escrito por Franklin Chen e traduzido para o português. Ler original.

Índice de toda a série

O índice de toda a série está no topo do artigo para o dia 1.

Dia 12

Hoje, revisitamos um problema do dia 4, onde nós pegamos um JSON da Web para extrair informações sobre ele. Eu mencionei então que estavámos usando uma representação não tipada para o JSON. Idealmente, se não estamos sob muita pressão para realizar a tarefa, queremos ter uma representação tipada dos dados, para evitar erros comuns como tentar acessar um campo que não existe. A biblioteca Aeson nos permite escrever nossas próprias estruturas de dados e as converter de e para JSON. Se estivermos sob controle dos dados e do modelo de dados, esse é o caminho que queremos seguir.

Continue lendo

24 dias de Hackage, 2015 - dia 11 - monad-loops: Refatorando para evitar escrever funções recursivas

Franklin Chen

Esse é um artigo escrito por Franklin Chen e traduzido para o português. Ler original.

Índice de toda a série

O índice de toda a série está no topo do artigo para o dia 1.


Dia 11

Desgosto, frequentemente, escrever funções recursivas. Recursão é uma forma de goto e, portanto, recursão é (conceitualmente) a infraestrutura baixo-nível de linguagem de montagem da programação funcional: um bloco fundamental para construção mas que, não necessariamente, quero ver todos os dias.

Continue lendo

24 dias de Hackage, 2015 - dia 10 - s-cargot: Usando a sintaxe de s-expressions

Franklin Chen

Esse é um artigo escrito por Franklin Chen e traduzido para o português. Ler original.

Índice de toda a série

O índice de toda a série está no topo do artigo para o dia 1.

Dia 10

Há momentos em que eu tenho inveja do mundo do Lisp.

Um desses momentos é quando estou definindo alguma linguagem de domínio específico, porque no mundo do Lisp, a escolha natural é a representar usando s-expressions como a sintaxe concreta, e não se preocupar com definir ainda outra sintaxe especial, junto com escrever um parser para essa sintaxe para a sintaxe abstrata e também um pretty-printer da sintaxe abstrata para a sintaxe concreta. Talvez no longo termo, os usuários podem querer sintaxe especial que não é só s-expressions, mas para protótipos iniciais, pelo menos, parece valoroso não se comprometer com nenhuma sintaxe e só usar s-expressions. Apesar de que não há nada de mágico sobre s-expressions (XML, JSON ou qualquer outra representação genérica de uma estrutura de árvore), elas são particularmente concisas e flexíveis.

Continue lendo

24 dias de Hackage, 2015 - dia 9 - Pontos interessantes do Template Haskell

Franklin Chen

Esse é um artigo escrito por Franklin Chen e traduzido para o português. Ler original.

Índice de toda a série

O índice de toda a série está no topo do artigo para o dia 1.


Dia 9

Uma observação negativa que fiz no dia 8 a respeito de Haskell e seu desconfortável suporte a multi-line string e interpolação trouxe interessantes comentários de que estava enganado e que de fato haviam boas soluções para isso. Já utilizo uma delas e não a trouxe à tona porque não queria tirar o foco do post mencionando outras bibliotecas, especialmente porque elas são implementadas no Template Haskell, a extensão do GHC que permite “macros para o Haskell”, habilitando metaprogramação em tempo de compilação (veja 2014 Day of Hackage article about Template Haskell). No dia 2, apresentei um pacote que utiliza o Template Haskell; vamos continuar com isso no post de hoje.

Continue lendo

24 dias de Hackage, 2015 - dia 8 - multiset; gostaria que isso estivesse no pacote padrão

Franklin Chen

Esse é um artigo escrito por Franklin Chen e traduzido para o português. Ler original.

Índice de toda a série

O índice de toda a série está no topo do artigo para o dia 1.

Dia 8

Não me lembro quando foi, mas um dia fiquei cansado de reimplementar, em Haskell, a mesma lógica clichê para rastrear múltiplos objetos sob a mesma chave. Essa estrutura de dados é conhecida por multiset, ou bag (N.T. alguns livros de estrutura de dados em Português podem traduzir para balde), em contraste com um set regular, que rastreia apenas um único objeto por chave.

Continue lendo

24 dias de Hackage, 2015 - dia 7 - semigroups; lista NonEmpty e um caso de estudo de tipos e testes

Franklin Chen

Esse é um artigo escrito por Franklin Chen e traduzido para o português. Ler original.

Índice de toda a série

O índice de toda a série está no topo do artigo para o dia 1.

Dia 7

O quão frequentemente o seguinte erro aconteceu para você, seja em Haskell ou em alguma outra linguagem?

*** Exception: Prelude.head: empty list

Basicamente, o código explodiu ao assumir que uma lista vazia tinha elementos.

Continue lendo

24 dias de Hackage, 2015 - dia 6 - Encontrando utilitários com Hoogle e Hayoo: MissingH, extra

Franklin Chen

Esse é um artigo escrito por Franklin Chen e traduzido para o português. Ler original.

Índice de toda a série

O índice de toda a série está no topo do artigo para o dia 1.

Dia 6

Nunca será o caso que tudo que todos consideram “útil” vai estar na “biblioteca padrão” de qualquer ecossistema de uma linguagem. Uma das funcionalidades mais legais do ecossistema do Haskell (que impressiona todos os não-Haskellers a quem eu a mostro) é a habilidade de pesquisar por funções pela sua assinatura de tipo, usando o Hoogle ou o Hayoo. Você também pode usar outros critérios, como nomes; isso pode ser útil se você tiver um chute do nome de alguma função que precise.

Continue lendo

24 dias de Hackage, 2015 - dia 5 - should-not-typecheck: Fazendo Haskell quase dinamicamente tipado com deferred-type-errors

Franklin Chen

Esse é um artigo escrito por Franklin Chen e traduzido para o português. Ler original.

Índice de toda a série

O índice de toda a série está no topo do artigo para o dia 1.

Dia 5

Você já se frustrou usando uma linguagem staticamente tipada, porque havia um erro em algum lugar da sua code base, mas você queria poder rodar o programa de qualquer jeito, ou porque não se importava com um erro que não tinha nada a ver com o que estava fazendo, ou porque queria poder andar pelo código e debugar o que o erro era de fato? Eu certamente já.

Continue lendo

24 dias de Hackage, 2015 - dia 4 - wreq: Programação de clientes Web; com notas sobre lens e a sintaxe de operadores

Franklin Chen

Esse é um artigo escrito por Franklin Chen e traduzido para o português. Ler original.

Índice de toda a série

O índice de toda a série está no topo do artigo para o dia 1.

Dia 4

No final dos anos 90, eu entusiasmadamente comprei o livro “Web Client Programming with Perl” [N.T. “Programação de Clientes Web com Perl” e usei a biblioteca LWP para fazer Web scraping automatizado. Eu continuei fazendo isso anos 2000 adentro. Estou feliz de que hoje, eu posso só usar Haskell para fazer esse tipo de programação e o fazer de forma sucinta.

Continue lendo

24 dias de Hackage, 2015 - dia 3 - HSpec; A importância de testes

Franklin Chen

Esse é um artigo escrito por Franklin Chen e traduzido para o português. Ler original.

Índice de toda a série

O índice de toda a série está no topo do artigo para o dia 1.


Dia 3

Passei meus anos formadores escrevendo software antes de “framework de testes” estar no meu vocabulário; antes de “desenvolvimento guiado a testes” (TDD) ser uma tendencia. Eu tenho arrepios de pensar nesses anos, porque agora eu sou um crente dos testes e do desenvolvimento guiado a testes (TDD) - segundo minha interpretação do que isso significa (já que todos temos definições diferentes).

Continue lendo

24 dias de Hackage, 2015 - dia 2 - Expressões regulares com pcre-heavy; scripts standalone usando Stack

Franklin Chen

Esse é um artigo escrito por Franklin Chen e traduzido para o português. Ler original.

Índice de toda a série

O índice de toda a série está no topo do artigo para o dia 1.


Dia 2

Não ria, mas muito tempo atrás, minha linguagem de programação principal era Perl (entre meados de 1999 e 2010). Havia uma série de razões para isso; uma delas era que Perl fazia processamento de texto usando expressões regulares ser muito fácil.

Continue lendo

Aperitivos de Haskell - 24 dias de Hackage, 2015 - dia 1 - Introdução e Stack

Franklin Chen

Esse é um artigo escrito por Franklin Chen e traduzido para o português. Ler original.

Nessa série de posts traduzidos “24 dias de Hackage, 2015”, caminhamos por uma série de módulos publicados no ecossistema da linguagem de programação Haskell. Pacotes bonitos, surpreendentes ou simplesmente muito úteis para o uso de Haskell na vida real.

Continue lendo