Simplificando um Backend Haskell com GADTs: Uma História de Dois Alvos Lambda Box

2025-01-24
Simplificando um Backend Haskell com GADTs: Uma História de Dois Alvos Lambda Box

Este post de blog detalha como o autor usou Tipos Algébricos Generalizados (GADTs) em Haskell para simplificar o desenvolvimento de um backend de compilador Agda. Enfrentando o desafio de compilar para dois alvos diferentes de linguagem intermediária Lambda Box (tipado e não tipado), o autor aproveitou GADTs e tipos dependentes para evitar elegantemente a duplicação de código e impor segurança de tipo. O sistema de tipo impede a omissão de informações de tipo para o alvo tipado. Este exemplo prático demonstra o poder dos GADTs na programação do dia a dia e mostra como os tipos dependentes podem ajudar a prevenir erros, resultando em código mais limpo e fácil de manter.

Leia mais
Desenvolvimento Tipos Dependentes

Sobrecarga da Abstração Lambda em Haskell: Uma Abordagem Elegante para Design de EDSL

2024-12-30
Sobrecarga da Abstração Lambda em Haskell: Uma Abordagem Elegante para Design de EDSL

Este artigo apresenta um novo método para sobrecarregar a abstração lambda em Haskell para construir linguagens de domínio específicas incorporadas (EDSLs). Usando de forma inteligente um tipo `Port` e funções `encode`/`decode`, o autor traduz elegantemente funções Haskell em morfismos dentro de uma categoria personalizada. Isso resulta em uma sintaxe concisa e intuitiva, evitando as complexidades das abstrações Arrow e a notação proc. A abordagem requer código Haskell mínimo e nenhum metaprogramação ou plug-ins de compilador. Um exemplo de DSL de diagrama de fluxo demonstra a aplicação do método, juntamente com discussões sobre como prevenir duplicação e lidar com efeitos colaterais.

Leia mais
Desenvolvimento Abstração Lambda