Escrevendo Dockerfiles em Haskell
Pedro Tacla Yamada
Nesse post, anuncio o
language-dockerfile
,
um parser, pretty-printer, linter e EDSL para escrever Dockerfiles em
Haskell. Tentarei explicar sua motivação, como o usar e onde gostaria de
chegar no futuro. Fica para um outro post discutir sua implementação usando
Monads livres.
Um pouco sobre Lazy Evaluation em Haskell - Expressões, Valores e Formas
H. T., baseado na obra de Takenobu T.
Um pouco sobre o significado de Lazy Evaluation e conceitos relacionados envolvidos. Baseado na obra de Takenobu T., Lazy Evaluation Illustrated for Haskell Divers e com comentários e analogias agregadas livremente pela autora do post.
Continue lendoHaskell 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 lendoUm pouco sobre Lazy Evaluation em Haskell
H. T., baseado na obra de Takenobu T.
Um pouco sobre o significado de Lazy Evaluation e como o Haskell trabalha tal conceito. Baseado na obra de Takenobu T., Lazy Evaluation Illustrated for Haskell Divers e com comentários e analogias agregadas livremente pela autora do post.
Continue lendoMeta-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 lendoTalk - 'Reflex: Practical Functional Reactive Programming (FRP) in Haskell (part 1/2)'
Continue lendoVocê pode conseguir rapidamente prototipar algo em outras linguagens, mas para mim a questão real é o quão rápido posso levar as coisas para o mercado e é aí que o Haskell brilha de verdade.
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.
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 lendo24 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
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 lendo24 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.
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.
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
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?
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
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 lendo24 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
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.
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
Índice de toda a série
O índice de toda a série está no topo do artigo para o dia 1.
Dia 18
É 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.
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
Í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 lendo24 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
Í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?
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
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.
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
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?
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 lendo24 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.
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.
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 lendo24 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 lendo24 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 lendo24 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?
Basicamente, o código explodiu ao assumir que uma lista vazia tinha elementos.
Continue lendo24 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.
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 lendo24 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 lendoSobre Text e OverloadedStrings
Pedro Tacla Yamada
Essa é uma nota rápida para completar o
dia 4 da série 24 dias de Hackage. Vou
comentar brevemente sobre a extensão OverloadedStrings
e os tipos String
,
ByteString
e Text
.
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 lendo24 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 lendoAperitivos 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 lendoImplementando fibonacci em Haskell
Pedro Tacla Yamada
A mágica da avaliação não estrita e funções de alta ordem. Um crash course de 5 minutos em Haskell e a descontrução da implementação de fibonacci clássica em uma linha com comparações de trechos de JavaScript.
Continue lendo