Mônada (programação funcional)
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]
Visão geral
[editar | editar código-fonte]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 tipoa
e o envolve em um valor monádico do tipoM a
, ebind :: (M a) -> (a -> M b) -> (M b)
(normalmente representado como>>=
), que recebe uma funçãof
sobre o tipoa
e pode transformar valores monádicosM a
aplicandof
ao desembrulhado valora
, retornando um valor monádicoM b
.
Referências
- ↑ O'Sullivan, Bryan; Goerzen, John; Stewart, Don (2009). «Monads». Real World Haskell. Sebastopol, California: O'Reilly Media. ISBN 978-0596514983
- ↑ Wadler, Philip (junho de 1990). Comprehending Monads. ACM Conference on LISP and Functional Programming. Nice, France. CiteSeerX 10.1.1.33.5381
- ↑ a b Moggi, Eugenio (1991). «Notions of computation and monads» (PDF). Information and Computation. 93 (1): 55–92. CiteSeerX 10.1.1.158.5275. doi:10.1016/0890-5401(91)90052-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.9516
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