Mônada (programação funcional)
# 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 .
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. 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.

## Visão geral

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 .