Estou aprendendo a linguagem de programação Haskell. Pelo que estou lendo, Input / Ouput ( IO ) levanta desafios para a pureza de Haskell, pois, por definição, estamos interagindo com o mundo exterior. Da Wikipedia:
Em uma linguagem puramente funcional, como Haskell, as funções não podem ter efeitos colaterais visíveis externamente como parte da semântica da função. Embora uma função não possa causar diretamente um efeito colateral, ela pode criar um valor que descreva o efeito colateral desejado, que o chamador deve aplicar em um momento conveniente.
Na notação Haskell, um valor do tipo IO a representa uma ação que, quando executada, produz um valor do tipo a.
Logo aprendi que IO é um exemplo de uma mônada de Haskell. Embora não tenhamos muitas explicações sobre o que são mônadas. De Functors, candidatos e mônadas em imagens
Como aprender sobre as Mônadas:
- Obter um PhD em ciência da computação.
- Jogue fora, porque você não precisa para esta seção!
Até agora, já li várias definições de - que elas adicionam contexto ou criam linguagens de programação menores dentro de uma grande em torno de um conceito específico. Ainda tentando entender o que as mônadas e como essas idéias se aplicam.
Em Haskell, monad
há outra classe tipográfica, com basicamente apenas uma regra definindo-a. E IO
é um exemplo disso.
class Monad m where
(>>=) :: m a -> (a -> m b) -> m b
/programming/44965/what-is-a-monad
Há algo algébrico acontecendo aqui? O que há de algébrico no IO?
Peço desculpas por ser específico do idioma. Minha esperança é que a maior parte dessa discussão se aplique a todas as linguagens de programação funcionais. Quaisquer erros na minha discussão representam meu próprio entendimento limitado dessa área.
Há outra definição de mônada que encontrei no nLab que nem sequer é específica para linguagens de programação.
Em uma pergunta à parte, eu gostaria de entender como a noção de mônada da teoria da categoria corresponde à definição de CS no caso de Haskell.