As respostas aqui fazem um excelente trabalho na definição de monóides e mônadas, no entanto, elas ainda não parecem responder à pergunta:
E, em uma nota menos importante, isso é verdade e, em caso afirmativo, você poderia dar uma explicação (espero que possa ser entendida por alguém que não tenha muita experiência com Haskell)?
O cerne da questão que falta aqui é a noção diferente de "monóide", a chamada categorização mais precisamente - a de monóide em uma categoria monoidal. Infelizmente, o próprio livro de Mac Lane o torna muito confuso :
No total, uma mônada Xé apenas um monóide na categoria de endofunitores de X, com o produto ×substituído pela composição dos endofunitores e a unidade definida pelo endofuncor de identidade.
Confusão principal
Por que isso é confuso? Porque não define o que é "monóide na categoria de endofunitores" de X. Em vez disso, essa sentença sugere levar um monóide dentro do conjunto de todos os endofunitores junto com a composição do functor como operação binária e o functor de identidade como uma unidade monoidal. O que funciona perfeitamente bem e transforma em monóide qualquer subconjunto de endofunitores que contém o functor de identidade e é fechado na composição do functor.
No entanto, essa não é a interpretação correta, que o livro deixa de esclarecer nessa fase. Uma Mônada fé um endofuncor fixo , não um subconjunto de endofuncores fechado sob composição. Uma construção comum é a utilização fpara gerar uma monóide, tendo o conjunto de todas as kcomposições vezes de f^k = f(f(...))de fcom ele mesmo, incluindo k=0que corresponde à identidade f^0 = id. E agora o conjunto Sde todos esses poderes para todos k>=0é de fato um monóide "com o produto × substituído pela composição dos endofunitores e pela unidade definida pelo endofuncor de identidade".
E ainda:
- Este monóide
Spode ser definido para qualquer functor fou mesmo literalmente para qualquer auto-mapa de X. É o monóide gerado por f.
- A estrutura monoidal
Sdada pela composição do functor e pelo functor de identidade não tem nada a ver com fser ou não ser uma mônada.
E para tornar as coisas mais confusas, a definição de "monóide na categoria monoidal" vem mais adiante neste livro, como você pode ver no índice . E, no entanto, entender essa noção é absolutamente crítico para entender a conexão com as mônadas.
Categorias monoidais (estritas)
Indo para o capítulo VII sobre monóides (que vem depois do capítulo VI sobre mônadas), encontramos a definição da chamada categoria monoidal estrita como tripla (B, *, e), onde Bé uma categoria, *: B x B-> Bum bifunctor (functor em relação a cada componente com outro componente fixo) ) e eé um objeto de unidade que Bsatisfaz as leis de associatividade e de unidade:
(a * b) * c = a * (b * c)
a * e = e * a = a
para quaisquer objetos a,b,cde B, e as mesmas identidades para qualquer morphisms a,b,ccom esubstituídas por id_e, o morfismo identidade e. Agora é instrutivo observar que, no nosso caso de interesse, onde Bestá a categoria de endofundeiros Xcom transformações naturais como morfismos, *composição de functor e efunctor de identidade, todas essas leis são cumpridas, como podem ser verificadas diretamente.
O que vem depois no livro é a definição da categoria monoidal "relaxada" , em que as leis mantêm apenas algumas transformações naturais fixas que satisfazem as chamadas relações de coerência , o que, no entanto, não é importante para os nossos casos das categorias de endofuncores.
Monoides em categorias monoidais
Finalmente, na seção 3 "Monoids" do capítulo VII, a definição real é dada:
Um monóide cem uma categoria monoidal (B, *, e)é um objeto Bcom duas setas (morfismos)
mu: c * c -> c
nu: e -> c
fazendo 3 diagramas comutativos. Lembre-se que, no nosso caso, estes são morphisms na categoria de endofunctors, que são transformações naturais correspondentes a precisão joine returnpara uma mônada. A conexão se torna ainda mais clara quando tornamos a composição *mais explícita, substituindo c * cpor c^2onde cestá nossa mônada.
Finalmente, observe que os três diagramas comutativos (na definição de um monóide na categoria monoidal) são escritos para categorias monoidais gerais (não estritas), enquanto no nosso caso todas as transformações naturais que surgem como parte da categoria monoidal são na verdade identidades. Isso tornará os diagramas exatamente iguais aos da definição de mônada, completando a correspondência.
Conclusão
Em resumo, qualquer mônada é, por definição, um endofuncor, portanto, um objeto na categoria de endofunitores, em que o monádico joine os returnoperadores satisfazem a definição de um monóide nessa categoria monoidal (estrita) específica . Vice-versa, qualquer monóide na categoria monoidal de endofuncores é, por definição, um triplo que (c, mu, nu)consiste em um objeto e duas setas, por exemplo, transformações naturais em nosso caso, que cumprem as mesmas leis que uma mônada.
Finalmente, observe a principal diferença entre os monóides (clássicos) e os monóides mais gerais nas categorias monoidais. As duas setas mue nuacima não são mais uma operação binária e uma unidade em um conjunto. Em vez disso, você tem um endofunctor fixo c. A composição do functor *e o functor de identidade por si só não fornecem a estrutura completa necessária para a mônada, apesar dessa observação confusa no livro.
Outra abordagem seria para comparar com o monoid padrão Cde todas as auto-aplicações de um conjunto A, onde a operação binária é a composição, que pode ser visto para mapear o produto cartesiano padrão C x Cem C. Passando para o monóide categorizado, estamos substituindo o produto cartesiano xpela composição de functor *e a operação binária é substituída pela transformação natural mude
c * cpara c, que é uma coleção de joinoperadores
join: c(c(T))->c(T)
para cada objeto T(digite na programação). E os elementos de identidade nos monoides clássicos, que podem ser identificados com imagens de mapas de um conjunto fixo de um ponto, são substituídos pela coleção dos returnoperadores
return: T->c(T)
Mas agora não há mais produtos cartesianos, portanto não há pares de elementos e, portanto, nenhuma operação binária.