Haskell

Disponível somente no TrabalhosFeitos
  • Páginas : 10 (2431 palavras )
  • Download(s) : 0
  • Publicado : 9 de junho de 2012
Ler documento completo
Amostra do texto
AspectH: Uma Extensão Orientada a Aspectos de Haskell
Carlos A. R. Andrade 1
André L. M. Santos 1
Paulo H. M. Borba 1

Resumo: Este artigo apresenta uma extensão da linguagem de programação Haskell com o objetivo de melhorar a modularização de programas funcionais. Esta extensão, chamada AspectH, estende Haskell com conceitos de orientação a aspectos.
AspectH implementa ProgramaçãoOrientada a Aspectos (AOP) através de pointcuts
e advice, como em AspectJ, e foi projetada para atuar em programas Haskell que
utilizam mônadas.
Palavras-chave: Programação orientada a aspectos, programação funcional, Haskell,
mônadas.

Abstract: This paper presents an extension of the Haskell programming language
with the objective of improving modularization of functional programs. Thisextension, AspectH, extends Haskell with aspect oriented concepts. AspectH implements
Aspect-Oriented Programming (AOP) through pointcuts and advice, like in AspectJ,
and was designed to be used in Haskell programs that use monads.
Keywords: Aspect-oriented programming, functional programming, Haskell, monads.
1

Introdução

Este artigo apresenta uma extensão da linguagem Haskell [4] com o objetivode melhorar a modularização de programas funcionais. Esta extensão, chamada AspectH, estende
Haskell com conceitos de orientação a aspectos. AspectH implementa Aspect-Oriented Programming (AOP) através de pointcuts e advice, como em AspectJ [5], e foi projetada para
atuar em programas Haskell que utilizam mônadas.
Haskell é uma linguagem funcional de propósito geral, não estrita (os parâmetrosreais
de uma função são avaliados apenas se e quando necessário) e puramente funcional (ausência
de estado), com suporte a polimorfismo, funções de alta ordem, tipos algébricos de dados
e compreensão de listas. A linguagem possui um sistema de módulos extensível e também
suporta polimorfismo ad-hoc (através de classes).
Após introduzir brevemente a noção de mônada (Seção 2), apresentamos asprincipais
características de AspectH (Seção 3) e como é possível utilizar a linguagem para codificar
1 Centro

de Informática, UFPE, Caixa Postal 7851
{cara,alms,phmb@cin.ufpe.br}

AspectH: Uma Extensão Orientada a Aspectos de Haskell

exemplos clássicos de crosscutting concerns, como autenticação e controle de exceções, de
forma modular (Seção 4). Comparamos também nosso trabalho comoutras tentativas de
explorar AOP em linguagens funcionais (Seção 5). Por fim, na Seção 6, apresentamos nossas
conclusões e os trabalhos futuros.

2

Mônadas

Mônadas provêem um framework conveniente para linguagens funcionais suportarem
efeitos encontrados em linguagens imperativas, tais como estado global, controle de exceções, output, e não determinismo, que não são facilmenteimplementados por outros mecanismos em linguagens funcionais.
Em Haskell, uma mônada é representada por um construtor de tipo com duas funções
associadas, que é definida através da classe Monad:
class Monad m where
return :: a -> m
(>>=) :: m a -> (a -> m b) -> m b
Qualquer construtor de tipo m pode ser considerado uma mônada, uma vez que as
funções return e >>= tenham sido definidas numa instância daclasse Monad. Além disso,
as operações da mônada devem obedecer às seguintes leis, conhecidas como axiomas monádicos 2 :
m
>>= return = m
return x >>= f
=fx
(m >>= f) >>= g
= m >>= (\x -> f x >>= g)
É de responsabilidade do programador definir as operações da mônada de tal forma que os
axiomas monádicos se apliquem.
Haskell provê a notação do como uma conveniência sintática para programaçãomonádica. Expressões que utilizam do são traduzidas em chamadas à função >>= da seguinte
forma [4]:
do { e }
=e
do { e; stmts }
= e >>= \_ -> do { stmts }
do { x >= \x -> do { stmts }
2 Em

22

Haskell abstrações lambda são definidas usando o caracter “\” no lugar do “λ”.

RITA • Volume XI • Número 1 • 2005

AspectH: Uma Extensão Orientada a Aspectos de Haskell

Para ilustrar o...
tracking img