Saltar para o conteúdo

Mônada (programação funcional)

Origem: Wikipédia, a enciclopédia livre.
 Nota: Para Para o conceito de mônadas na filosofia, veja Mônada (filosofia).

Na programação funcional, uma mônada é uma estrutura que combina fragmentos de programa (funções) e envolve seus valores de retorno em um tipo com computação adicional. Além de definir um tipo monádico de encapsulamento, as mônadas definem dois operadores: para agrupar um valor no tipo de mônada e para compor funções que geram valores do tipo mônada (são conhecidas como funções monádicas). Linguagens de propósito geral usam mônadas para reduzir o código boilerplate necessário para operações comuns, como lidar com valores indefinidos ou funções falíveis ou encapsular código de contabilidade. Linguagens funcionais usam mônadas para transformar sequências complicadas de funções em pipelines sucintos que abstraem o fluxo de controle e os efeitos colaterais .[1][2]

Tanto o conceito de mônada quanto o termo vêm originalmente da teoria das categorias, onde uma mônada é definida como um functor com estrutura adicional. [a] Pesquisas iniciadas no final da década de 1980 e início da década de 1990 estabeleceram que mônadas poderiam causar problemas de ciência da computação aparentemente sistintos sob um modelo funcional e unificado. A teoria das categorias também fornece alguns requisitos formais, conhecidos como leis das mônadas, que devem ser satisfeitos por qualquer mônada e podem ser usados para verificar o código monádico.[3][4]

Mais exatamente, uma mônada pode ser usada quando o acesso irrestrito a um valor for inadequado por motivos específicos do cenário.

Nesse exemplo (na linguagem de programação Haskell), Uma mônada pode ser criada definindo um construtor de tipo M e duas operações:

  • return :: a -> M a (muitas vezes também chamado de unit ), que recebe um valor do tipo a e o envolve em um valor monádico do tipo M a, e
  • bind :: (M a) -> (a -> M b) -> (M b) (normalmente representado como >>= ), que recebe uma função f sobre o tipo a e pode transformar valores monádicos M a aplicando f ao desembrulhado valor a, retornando um valor monádico M b .

Referências

  1. O'Sullivan, Bryan; Goerzen, John; Stewart, Don (2009). «Monads». Real World Haskell. Sebastopol, California: O'Reilly Media. ISBN 978-0596514983 
  2. Wadler, Philip (junho de 1990). Comprehending Monads. ACM Conference on LISP and Functional Programming. Nice, France. CiteSeerX 10.1.1.33.5381Acessível livremente 
  3. a b Moggi, Eugenio (1991). «Notions of computation and monads» (PDF). Information and Computation. 93 (1): 55–92. CiteSeerX 10.1.1.158.5275Acessível livremente. doi:10.1016/0890-5401(91)90052-4 
  4. Wadler, Philip (janeiro de 1992). The essence of functional programming. 19th Annual ACM Symposium on Principles of Programming Languages. Albuquerque, New Mexico. CiteSeerX 10.1.1.38.9516Acessível livremente 


Erro de citação: Existem etiquetas <ref> para um grupo chamado "lower-alpha", mas não foi encontrada nenhuma etiqueta <references group="lower-alpha"/> correspondente