Aspecth: uma extensão de Haskell orientada a aspectos - ANDRADE, Carlos Andreazza Rego (2005)
Uma das principais técnicas de abstração oferecida pelas linguagens de programação atuais é a possibilidade de dividir um sistema em unidades de código que capturam suas funcionalidades. Esta abstração permite que mudanças em uma unidade em particular não se propaguem por todo sistema. No entanto, isto é apenas aplicável quando tais funcionalidades ou preocupações podem de fato ser classificadas como unidades separadas. Algumas funcionalidades ou preocupações - conhecidas como preocupações entrelaçadas (crosscutting concerns) - repercutem por todo o sistema e não podem ser definidas em módulos tradicionais. Assim, todo o código que as implementa fica espalhado e misturado por diversos módulos. O paradigma de programação orientado a aspectos (AOP) tem sido apresentado na literatura como uma maneira alternativa de implementar os crosscutting concerns de um sistema, disponibilizando construções que permitem separá-los em unidades adequadamente. Um conceito central neste paradigma é o de aspecto, que é sua unidade modular. Uma linguagem de programação orientada a aspectos é usualmente estabelecida como uma extensão de uma linguagem de programação existente, provendo ao programador tanto as unidades modulares desta linguagem (conhecida como linguagem base) quanto os aspectos. Este trabalho apresenta a linguagem AspectH, uma extensão orientada a aspectos de Haskell. AspectH implementa o mecanismo AOP de pointcuts e advice como em AspectJ e foi projetada para atuar em programas Haskell que utilizam mônadas. Por meio de AspectH, investigamos os benefícios que uma abordagem AOP pode oferecer no contexto de uma linguagem puramente funcional. Em outras palavras, pretendemos demonstrar que AOP pode fazer por Haskell e linguagens funcionais o que já faz, como exemplo, por linguagens orientadas a objetos. AspectH oferece ao programador a possibilidade de implementar os crosscutting concerns de programas monádicos em aspectos, ajudando-o a criar programas mais modulares e conseqüentemente mais legíveis, mais fáceis de manter e reusar