Ainda estou aprendendo programação funcional (com f #) e recentemente comecei a ler sobre expressões de computação. Ainda não entendo completamente o conceito e uma coisa que me mantém insegura ao ler todos os artigos sobre mônadas (a maioria deles é escrita com base em Haskell) é a relação entre expressões computacionais e mônadas.
Tendo escrito tudo isso, aqui está a minha pergunta (duas perguntas, na verdade):
Toda expressão de computação em F # é uma mônada? Cada mônada pode ser expressa com a expressão de computação F #?
Eu li este post do Tomas Petricek e, se o entendo bem, afirma que as expressões de computação são mais do que mônadas, mas não tenho certeza se interpreto isso corretamente.
functional-programming
Grzegorz Sławecki
fonte
fonte
Respostas:
Antes de tudo, expressões de computação são uma característica da linguagem, enquanto mônadas são abstrações matemáticas, portanto, deste ponto de vista, são coisas completamente diferentes .
Mas isso não seria uma resposta muito útil :-). Expressões de computação são um recurso de linguagem que fornece uma sintaxe que pode ser usada para programação com cálculos (ou tipos de dados) que possuem a estrutura monádica, mas também podem ser usados com outras estruturas. Você pode ler meu artigo do zoo de expressões de computação em F # para obter mais detalhes, mas as expressões de computação podem ser usadas com:
MonadPlus
ouMonadOr
)Portanto, as expressões de computação certamente estão intimamente ligadas às mônadas, mas não estão intimamente ligadas a elas. Isso contrasta, por exemplo, com a
do
notação de Haskell , que está muito mais intimamente ligada às mônadas (embora isso possa ser usado com cálculos que não são estritamente matematicamente mônadas).fonte
Você pode usar expressões de computação para expressar mônadas. Há um exemplo aqui . Além disso, como você observou, você pode usar expressões de computação para muito mais do que apenas mônadas. Há uma explicação estendida sobre como eles são diferentes aqui . Não há espaço aqui para explicar a diferença adequadamente, mas as expressões de computação são diferentes das mônadas, pois reutilizam a sintaxe F # normal e têm a capacidade de adicionar abstrações adicionais. Uma limitação é que é não-idiomático (e difícil) escrever uma expressão de computação que é polimórfica sobre o tipo de computação.
fonte